From 9e8166a515a4264aefe77edbf96bafa966bdbf0f Mon Sep 17 00:00:00 2001 From: aloftus23 Date: Mon, 10 Jun 2024 09:31:55 -0400 Subject: [PATCH] Various logging improvements, ASM summary tweaks, and scan fixes --- src/pe_mailer/email_reports.py | 64 ++++--- src/pe_reports/asm_generator.py | 47 +++-- .../assets_asm/empty_asm_2024-04-15.pdf | Bin 0 -> 163255 bytes src/pe_reports/data/db_query.py | 37 ++-- src/pe_reports/fonts/FranklinGothic.ttf | Bin 0 -> 32124 bytes .../fonts/Franklin_Gothic_Book_Regular.ttf | Bin 0 -> 152700 bytes src/pe_reports/helpers/encrypt_accessor.py | 37 ++-- src/pe_reports/pages.py | 6 +- src/pe_reports/report_generator.py | 70 +++---- src/pe_reports/reportlab_generator.py | 3 +- src/pe_source/cybersixgill.py | 110 +++++++---- src/pe_source/data/pe_db/db_query_source.py | 63 +++++-- src/pe_source/data/shodan_db/shodan_search.py | 24 ++- src/pe_source/data/sixgill/api.py | 172 +++++++++++++----- src/pe_source/data/sixgill/source.py | 57 ++++-- src/pe_source/dnsmonitor.py | 54 ++++-- src/pe_source/dnstwistscript.py | 63 +++++-- src/pe_source/intelx_identity.py | 17 +- src/pe_source/nist_update.py | 7 +- src/pe_source/pe_scripts.py | 38 +++- src/pe_source/pshtt_wrapper.py | 2 +- src/pe_source/shodan_wrapper.py | 7 +- 22 files changed, 589 insertions(+), 289 deletions(-) create mode 100644 src/pe_reports/assets_asm/empty_asm_2024-04-15.pdf create mode 100644 src/pe_reports/fonts/FranklinGothic.ttf create mode 100644 src/pe_reports/fonts/Franklin_Gothic_Book_Regular.ttf diff --git a/src/pe_mailer/email_reports.py b/src/pe_mailer/email_reports.py index 95141be7..1b12bcf4 100644 --- a/src/pe_mailer/email_reports.py +++ b/src/pe_mailer/email_reports.py @@ -28,13 +28,16 @@ import os import re import sys +import time from typing import Any, Dict # Third-Party Libraries import boto3 from botocore.exceptions import ClientError import docopt +import pymongo.errors from schema import And, Schema, SchemaError, Use +import yaml # cisagov Libraries import pe_reports @@ -44,7 +47,6 @@ from .pe_message import PEMessage from .stats_message import StatsMessage -# Setup logging LOGGER = logging.getLogger(__name__) MAILER_AWS_PROFILE = "cool-dns-sessendemail-cyber.dhs.gov" MAILER_ARN = os.environ.get("MAILER_ARN") @@ -192,11 +194,11 @@ def send_message(ses_client, message, counter=None): def send_pe_reports(ses_client, pe_report_dir, to): - """ - Send out Posture and Exposure reports. + """Send out Posture and Exposure reports. Parameters ---------- + ses_client : boto3.client The boto3 SES client via which the message is to be sent. @@ -227,22 +229,25 @@ def send_pe_reports(ses_client, pe_report_dir, to): try: # The directory must contain one usable report cyhy_agencies = len(pe_orgs) - LOGGER.info(f"{cyhy_agencies} agencies found in P&E.") + LOGGER.info(f"Running report mailer for {cyhy_agencies} organizations") 1 / cyhy_agencies except ZeroDivisionError: - LOGGER.critical("No report data is found in %s", pe_report_dir) + LOGGER.critical("No report data was found in %s", pe_report_dir) sys.exit(1) staging_conn = connect() # org_contacts = get_orgs_contacts(staging_conn) # old tsql ver. - org_contacts = get_orgs_contacts() # api ver. - + org_contacts = get_orgs_contacts() # api ver. + agencies_emailed_pe_reports = 0 + reports_not_mailed = 0 # Iterate over cyhy_requests, if necessary if pe_report_dir: for org in pe_orgs: id = org[2] if id == "GSEC": + LOGGER.warning(f"The PDF report for {org[2]} was intentionally set to not be mailed") + reports_not_mailed += 1 continue if to is not None: to_emails = to @@ -274,9 +279,10 @@ def send_pe_reports(ses_client, pe_report_dir, to): # At most one Cybex report and CSV should match if len(pe_report_filenames) > 2: - LOGGER.warning("More than two PDF reports found") + LOGGER.warning(f"More than two encrypted PDF reports found for {org[2]}") elif not pe_report_filenames: - LOGGER.error("No PDF report found") + LOGGER.warning(f"No encrypted PDF report found for {org[2]}, no report will be mailed") + reports_not_mailed += 1 continue if pe_report_filenames: @@ -306,10 +312,11 @@ def send_pe_reports(ses_client, pe_report_dir, to): pe_report_filename, pe_asm_filename, report_date, id, to_emails ) - print(to_emails) - print(pe_report_filename) - print(pe_asm_filename) - print(report_date) + print("Recipient: ", to_emails) + print("Report Date: ", report_date) + print("Report File:", pe_report_filename) + print("ASM Summary File", pe_asm_filename, "\n") + try: agencies_emailed_pe_reports = send_message( @@ -325,7 +332,8 @@ def send_pe_reports(ses_client, pe_report_dir, to): # Print out and log some statistics pe_stats_string = f"Out of {cyhy_agencies} agencies with Posture and Exposure reports, {agencies_emailed_pe_reports} ({100.0 * agencies_emailed_pe_reports / cyhy_agencies:.2f}%) were emailed." - LOGGER.info(pe_stats_string) + mail_summary_log_string = f"{agencies_emailed_pe_reports}/{cyhy_agencies} reports were mailed, {reports_not_mailed}/{cyhy_agencies} reports were not mailed" + LOGGER.info(mail_summary_log_string) return pe_stats_string @@ -339,19 +347,20 @@ def send_reports(pe_report_dir, summary_to, test_emails): return 1 # Assume role to use mailer - sts_client = boto3.client("sts") - assumed_role_object = sts_client.assume_role( - RoleArn=MAILER_ARN, RoleSessionName="AssumeRoleSession1" + sts_client = boto3.client('sts') + assumed_role_object=sts_client.assume_role( + RoleArn=MAILER_ARN, + RoleSessionName="AssumeRoleSession1" ) - credentials = assumed_role_object["Credentials"] + credentials=assumed_role_object['Credentials'] - ses_client = boto3.client( - "ses", + ses_client = boto3.client("ses", region_name="us-east-1", - aws_access_key_id=credentials["AccessKeyId"], - aws_secret_access_key=credentials["SecretAccessKey"], - aws_session_token=credentials["SessionToken"], + aws_access_key_id=credentials['AccessKeyId'], + aws_secret_access_key=credentials['SecretAccessKey'], + aws_session_token=credentials['SessionToken'] ) + # Email the summary statistics, if necessary if test_emails is not None: @@ -380,6 +389,8 @@ def send_reports(pe_report_dir, summary_to, test_emails): def main(): """Send emails.""" + LOGGER.info("--- PE Report Mailing Starting ---") + start_time = time.time() # Parse command line arguments args: Dict[str, str] = docopt.docopt(__doc__, version=__version__) @@ -416,7 +427,7 @@ def main(): level=log_level.upper(), ) - LOGGER.info("Sending Posture & Exposure Reports, Version : %s", __version__) + LOGGER.info("Posture & Exposure Report Mailer, Version : %s", __version__) send_reports( # TODO: Improve use of schema to validate arguments. @@ -426,5 +437,10 @@ def main(): validated_args["--test-emails"], ) + end_time = time.time() + LOGGER.info(f"Execution time for PE report mailing: {str(datetime.timedelta(seconds=(end_time - start_time)))} (H:M:S)") + LOGGER.info("--- PE Report Mailing Complete ---") + # Stop logging and clean up logging.shutdown() + diff --git a/src/pe_reports/asm_generator.py b/src/pe_reports/asm_generator.py index 7cbbd034..43b7c330 100644 --- a/src/pe_reports/asm_generator.py +++ b/src/pe_reports/asm_generator.py @@ -7,24 +7,25 @@ import os # Third-Party Libraries -from PyPDF2 import PdfFileReader, PdfFileWriter import fitz +from PyPDF2 import PdfFileReader, PdfFileWriter +import numpy as np import pandas as pd - -# from reportlab.lib.enums import TA_CENTER from reportlab.lib.pagesizes import letter from reportlab.lib.styles import ParagraphStyle -from reportlab.lib.units import inch from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfgen import canvas from reportlab.platypus import Frame, Paragraph +from reportlab.lib.enums import TA_CENTER +from reportlab.lib.units import inch + # cisagov Libraries from pe_reports.data.db_query import ( query_cidrs_by_org, - query_extra_ips, query_foreign_IPs, + query_extra_ips, query_ports_protocols, query_roots, query_software, @@ -35,17 +36,14 @@ LOGGER = logging.getLogger(__name__) BASE_DIR = os.path.abspath(os.path.dirname(__file__)) -IN_FILEPATH = BASE_DIR + "/assets_asm/attack_surface_empty.pdf" ON_PAGE_INDEX = 0 UNDERNEATH = ( False # if True, new content will be placed underneath page (painted first) ) +pdfmetrics.registerFont(TTFont("Frank_Goth", BASE_DIR + "/fonts/FranklinGothic.ttf")) pdfmetrics.registerFont( - TTFont("Frank_Goth", BASE_DIR + "/assets_asm/FranklinGothic.ttf") -) -pdfmetrics.registerFont( - TTFont("Frank_Goth_Book", BASE_DIR + "/assets_asm/Franklin_Gothic_Book_Regular.ttf") + TTFont("Frank_Goth_Book", BASE_DIR + "/fonts/Franklin_Gothic_Book_Regular.ttf") ) @@ -108,7 +106,7 @@ def add_stat_frame(current_value, last_value, x, y, width, height, style, can): def add_attachment(org_uid, final_output, pdf_file, asm_json, asm_xlsx): """Create and add JSON attachment.""" - LOGGER.info("Creating attachment") + LOGGER.info("Creating ASM attachments") # Create ASM Excel file asmWriter = pd.ExcelWriter(asm_xlsx, engine="xlsxwriter") @@ -119,16 +117,14 @@ def add_attachment(org_uid, final_output, pdf_file, asm_json, asm_xlsx): cidr_dict = cidr_df["network"].to_list() # Extra IPs - LOGGER.info("Getting extra IPs") ip_lst = query_extra_ips(org_uid) ips_df = pd.DataFrame(ip_lst, columns=["ip"]) ips_df.to_excel(asmWriter, sheet_name="Extra IPs", index=False) ips_dict = ips_df["ip"].to_list() - LOGGER.info("Finished extra IPs") # Ports/protocols ports_protocols_df = query_ports_protocols(org_uid) - ports_protocols_df.to_excel(asmWriter, sheet_name="Ports_Protocols", index=False) + ports_protocols_df.to_excel(asmWriter, sheet_name="Ports Protocols", index=False) ports_protocols_dict = ports_protocols_df.to_dict(orient="records") # Root domains @@ -139,9 +135,12 @@ def add_attachment(org_uid, final_output, pdf_file, asm_json, asm_xlsx): # Sub-domains sd_df = query_subs(org_uid) - sd_df = sd_df[["sub_domain"]] - sd_df.to_excel(asmWriter, sheet_name="Sub-domains", index=False) - sd_dict = sd_df["sub_domain"].to_list() + # sd_df = sd_df[["sub_domain"]] + #sd_df = sd_df[["sub_domain", "origin_root_domain", "pe_discovered_asset"]] + sd_df = sd_df[["sub_domain", "origin_root_domain"]] + sd_df.to_excel(asmWriter, sheet_name="Subdomains", index=False) + # sd_dict = sd_df["sub_domain"].to_list() + sd_dict = sd_df.to_dict(orient="records") # Software soft_df = query_software(org_uid) @@ -205,9 +204,7 @@ def add_attachment(org_uid, final_output, pdf_file, asm_json, asm_xlsx): return asm_xlsx -def create_summary( - org_uid, final_output, data_dict, file_name, json_filename, excel_filename -): +def create_summary(org_uid, final_output, data_dict, file_name, json_filename, excel_filename): """Create ASM summary PDF.""" packet = io.BytesIO() @@ -310,8 +307,8 @@ def create_summary( can, ) json_title_frame = Frame( - 6 * inch, 100, 1.5 * inch, 0.5 * inch, id=None, showBoundary=0 - ) + 6 * inch, 100, 1.5 * inch, 0.5 * inch, id=None, showBoundary=0 + ) json_title = Paragraph( "JSON      EXCEL", style=json_excel, @@ -324,7 +321,7 @@ def create_summary( new_pdf = PdfFileReader(packet) # Read existing PDF template - existing_pdf = PdfFileReader(open(BASE_DIR + "/assets_asm/empty_asm.pdf", "rb")) + existing_pdf = PdfFileReader(open(BASE_DIR + "/assets_asm/empty_asm_2024-04-15.pdf", "rb")) output = PdfFileWriter() # Add the "watermark" (which is the new pdf) on the existing page @@ -341,5 +338,5 @@ def create_summary( asm_xlsx = add_attachment( org_uid, final_output, file_name, json_filename, excel_filename ) - - return asm_xlsx + + return asm_xlsx \ No newline at end of file diff --git a/src/pe_reports/assets_asm/empty_asm_2024-04-15.pdf b/src/pe_reports/assets_asm/empty_asm_2024-04-15.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f5fe4ba1df7dd288a3f58bd6fb456ea618b999b6 GIT binary patch literal 163255 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
    r2V{4S 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 z

    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

    FEZkG=ML4>M}PAk5BQ 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 h`N(i3Y&O#ijXTuUFp43)Bqp%n(tDO+ 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 if@?o#d&2v|V~9YOOoN|bXJ$14b=7z*PFNa?i3 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 literal 0 HcmV?d00001 diff --git a/src/pe_reports/data/db_query.py b/src/pe_reports/data/db_query.py index 0eca2127..7ebb0474 100644 --- a/src/pe_reports/data/db_query.py +++ b/src/pe_reports/data/db_query.py @@ -29,8 +29,9 @@ CONN_PARAMS_DIC_STAGING = staging_config() # These need to filled with API key/url path in database.ini -pe_api_key = CONN_PARAMS_DIC_STAGING.get("pe_api_key") -pe_api_url = CONN_PARAMS_DIC_STAGING.get("pe_api_url") +API_DIC = staging_config(section="pe_api") +pe_api_url = API_DIC.get("pe_api_url") +pe_api_key = API_DIC.get("pe_api_key") def task_api_call(task_url, check_url, data={}, retry_time=3): @@ -55,24 +56,36 @@ def task_api_call(task_url, check_url, data={}, retry_time=3): create_task_url, headers=headers, data=data ).json() task_id = create_task_result.get("task_id") - LOGGER.info("Created task for", task_url, "query, task_id: ", task_id) + LOGGER.info("Created task for " + task_url + " query, task_id: " + task_id) check_task_url += task_id while task_status != "Completed" and task_status != "Failed": # Ping task status endpoint and get status - check_task_resp = requests.get(check_task_url, headers=headers).json() + # check_task_resp = requests.get(check_task_url, headers=headers).json() + check_task_resp = requests.get(check_task_url, headers=headers) + #print(check_task_resp) + check_task_resp = check_task_resp.json() task_status = check_task_resp.get("status") - LOGGER.info("\tPinged", check_url, "status endpoint, status:", task_status) + LOGGER.info( + "\tPinged " + check_url + " status endpoint, status: " + task_status + ) time.sleep(retry_time) except requests.exceptions.HTTPError as errh: LOGGER.error(errh) + print(errh) except requests.exceptions.ConnectionError as errc: LOGGER.error(errc) + print(errc) except requests.exceptions.Timeout as errt: LOGGER.error(errt) + print(errt) except requests.exceptions.RequestException as err: LOGGER.error(err) + print(err) except json.decoder.JSONDecodeError as err: LOGGER.error(err) + print(err) + except Exception as err: + print(err) # Once task finishes, return result if task_status == "Completed": return check_task_resp.get("result") @@ -2080,7 +2093,6 @@ def query_subs(org_uid): Return: All the subdomains belonging to the specified org as a dataframe """ - start_time = time.time() total_num_pages = 1 page_num = 1 total_data = [] @@ -2100,21 +2112,16 @@ def query_subs(org_uid): page_num += 1 # Once all data has been retrieved, return overall dataframe total_data = pd.DataFrame.from_dict(total_data) - LOGGER.info( - "Total time to retrieve all subdomains for this org: " - + str(time.time() - start_time) - ) # Process data and return total_data.rename( columns={ - "root_domain_uid_id": "root_domain_uid", - "data_source_uid_id": "data_source_uid", - "dns_record_uid_id": "dns_record_uid", + "root_domain_uid__root_domain": "origin_root_domain", + "identified": "pe_discovered_asset", }, inplace=True, ) - total_data["first_seen"] = pd.to_datetime(total_data["first_seen"]).dt.date - total_data["last_seen"] = pd.to_datetime(total_data["last_seen"]).dt.date + # total_data["first_seen"] = pd.to_datetime(total_data["first_seen"]).dt.date + # total_data["last_seen"] = pd.to_datetime(total_data["last_seen"]).dt.date # Return truly empty dataframe if no results if total_data[total_data.columns].isnull().apply(lambda x: all(x), axis=1)[0]: total_data.drop(total_data.index, inplace=True) diff --git a/src/pe_reports/fonts/FranklinGothic.ttf b/src/pe_reports/fonts/FranklinGothic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..778e5b14afec0e89dbc626fd6ad35591d74f6b8e GIT binary patch literal 32124 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 literal 0 HcmV?d00001 diff --git a/src/pe_reports/fonts/Franklin_Gothic_Book_Regular.ttf b/src/pe_reports/fonts/Franklin_Gothic_Book_Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..21c4ecfc553e9fa94ac0c01368ff657f48493ca1 GIT binary patch literal 152700 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

    `{Km@g4Y9fZ=2m=`_>C3acW}|!9yI;1qbIRL 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 JkX1y;{{bcQ7_$HX literal 0 HcmV?d00001 diff --git a/src/pe_reports/helpers/encrypt_accessor.py b/src/pe_reports/helpers/encrypt_accessor.py index 93759a5a..e8afda0e 100644 --- a/src/pe_reports/helpers/encrypt_accessor.py +++ b/src/pe_reports/helpers/encrypt_accessor.py @@ -10,20 +10,18 @@ -c --ssh-rsa-file=FILENAME A YAML file containing the Cyber Hygiene database credentials. """ -# Standard Python Libraries +import boto3 +from datetime import timedelta +from docopt import docopt +import fitz import logging import os +import time import traceback -# Third-Party Libraries -from docopt import docopt -import fitz - -# cisagov Libraries +from pe_reports.data.db_query import connect, get_orgs, get_orgs_pass from pe_reports.data.config import db_password_key -from pe_reports.data.db_query import connect, get_orgs_pass -# Setup logging LOGGER = logging.getLogger(__name__) ACCESSOR_AWS_PROFILE = "cool-dns-sesmanagesuppressionlist-cyber.dhs.gov" BUCKET_NAME = "cisa-crossfeed-staging-reports" @@ -53,23 +51,27 @@ def encrypt(file, password, encrypted_file): def download_encrypt_reports(report_date, output_dir): """Fetch reports from S3 bucket.""" - # download_count = 0 - # total = len(pe_orgs) - # print(total) - + LOGGER.info("--- PE Report Encryption Starting ---") + start_time = time.time() + download_count = 0 # Encrypt the reports conn = connect() pe_org_pass = get_orgs_pass(conn, PASSWORD) conn.close() encrypted_count = 0 + no_pass_count = 0 + LOGGER.info(f"Encrypting {len(pe_org_pass)} PE reports for the {report_date} report run") for org_pass in pe_org_pass: print(org_pass) password = org_pass[1] - if password is None: - LOGGER.error("NO PASSWORD") + if password == None: + LOGGER.warning(f"No password on file for {org_pass[0]}, no encrypted report will be generated") + no_pass_count += 1 continue # Check if file exists before encrypting - current_file = f"{output_dir}/{org_pass[0]}/Posture_and_Exposure_Report-{org_pass[0]}-{report_date}.pdf" + current_file = ( + f"{output_dir}/{org_pass[0]}/Posture_and_Exposure_Report-{org_pass[0]}-{report_date}.pdf" + ) current_asm_file = f"{output_dir}/{org_pass[0]}/Posture-and-Exposure-ASM-Summary_{org_pass[0]}_{report_date}.pdf" if not os.path.isfile(current_file): LOGGER.error("%s report does not exist.", org_pass[0]) @@ -100,7 +102,10 @@ def download_encrypt_reports(report_date, output_dir): LOGGER.error("%s report failed to encrypt.", org_pass[0]) continue - LOGGER.info("%d/%d were encrypted.", encrypted_count, 134) + end_time = time.time() + LOGGER.info(f"{encrypted_count}/{len(pe_org_pass)} reports were encrypted, {no_pass_count}/{len(pe_org_pass)} reports do not have passwords") + LOGGER.info(f"Execution time for PE report encryption: {str(timedelta(seconds=(end_time - start_time)))} (H:M:S)") + LOGGER.info("--- PE Report Encryption Complete ---") def main(): diff --git a/src/pe_reports/pages.py b/src/pe_reports/pages.py index 48b24b24..e63fdd52 100644 --- a/src/pe_reports/pages.py +++ b/src/pe_reports/pages.py @@ -376,11 +376,11 @@ def init( } # Get ASM values - LOGGER.info("Getting asset counts") + # LOGGER.info("Getting asset counts") asset_dict = get_org_assets_count(org_uid) - LOGGER.info("finished getting asset counts") + # LOGGER.info("finished getting asset counts") asset_dict_past = get_org_assets_count_past(org_uid, start_date - timedelta(days=1)) - LOGGER.info("Past report date: %s", start_date - timedelta(days=1)) + # LOGGER.info("Past report date: %s", start_date - timedelta(days=1)) if asset_dict_past.empty: LOGGER.error("No ASM summary data for the last report period.") diff --git a/src/pe_reports/report_generator.py b/src/pe_reports/report_generator.py index cc24bcc0..ad13b0ae 100644 --- a/src/pe_reports/report_generator.py +++ b/src/pe_reports/report_generator.py @@ -19,11 +19,13 @@ import logging import os import sys +import time from typing import Any, Dict # Third-Party Libraries import boto3 from botocore.exceptions import ClientError +from datetime import timedelta import docopt import fitz import pandas as pd @@ -35,14 +37,14 @@ from ._version import __version__ from .asm_generator import create_summary from .data.db_query import connect, get_demo_orgs, get_orgs, refresh_asset_counts_vw + +# from .helpers.generate_score import get_pe_scores from .pages import init from .reportlab_core_generator import core_report_gen from .reportlab_generator import report_gen # from .scorecard_generator import create_scorecard -# from .helpers.generate_pe_score import get_pe_scores -# Setup logging LOGGER = logging.getLogger(__name__) ACCESSOR_AWS_PROFILE = os.getenv("ACCESSOR_PROFILE") @@ -61,13 +63,16 @@ def upload_file_to_s3(file_name, datestring, bucket, excel_org): try: response = s3_client.upload_file(file_name, bucket, object_name) if response is None: - LOGGER.info("Success uploading to S3.") + LOGGER.info(f"Success uploading {file_name.split('/')[-1]} to S3.") else: LOGGER.info(response) except ClientError as e: LOGGER.error(e) +LOGGER = logging.getLogger(__name__) + + def embed( output_directory, org_code, @@ -168,43 +173,34 @@ def generate_reports(datestring, output_directory, soc_med_included=False, demo= generated_reports = 0 # Resfresh ASM counts view - LOGGER.info("Refreshing ASM count view and IPs from cidrs") + LOGGER.info("Refreshing ASM asset count view and IPs from cidrs view") refresh_asset_counts_vw() # set_from_cidr() - LOGGER.info("Finished refreshing ASM count view and IPs from Cidrs") + LOGGER.info("Finished refreshing ASM asset count view and IPs from cidrs view") # Iterate over organizations - if pe_orgs: - LOGGER.info("PE orgs count: %d", len(pe_orgs)) - # Generate PE scores for all stakeholders. - LOGGER.info("Calculating P&E Scores") + # Generate PE scores for all stakeholders WIP + # LOGGER.info("Calculating P&E Scores") # pe_scores_df = get_pe_scores(datestring, 12) - # go = 0 # pe_orgs.reverse() - for org in pe_orgs: + + # Uncomment this to generate reports only for these orgs + # pe_orgs = [x for x in pe_orgs if x[2] in [""]] + + # Uncomment this to generate all reports except for these orgs + # pe_orgs = [x for x in pe_orgs if x[2] not in [""]] + + LOGGER.info(f"Generating PE reports for {len(pe_orgs)} requested organizations") + + for org_idx, org in enumerate(pe_orgs): # Assign organization values org_uid = org[0] org_name = org[1] org_code = org[2] premium = org[8] - # Uncomment this to only run specified orgs - # if org_code not in ["EXIM"]: - # continue - - # Uncomment this to skip specified orgs - # if org_code in ["ABLTYONE","ACHP","ACUS","ADF","AFRH","BGSF","CFA","CFPB","CFTC","CIGIE","CLACWA","CNCS","CPSC","CSHIB","CSOSA","DE","DENALI_AlasConnect","DFC","DHS","DHS_FLETC","DNFSB","DOC","DOC_BIS","DOC_CENSUS","DOC_NIST","DOC_NOAA","DOC_NTIA","DOE","DOI","DOI_BIA","DOI_BSEE-BOEM-ONRR","DOI_FWS","DOI_IBC","DOI_NPS","DOI_OIG","DOI_OS","DOI_OS-OAS","DOJ","DOL","DOL_BLS","DOS","DOT","EAC","ED","EEOC","EOP","EOP_OMB","EPA","EXIM","FAA","FCA","FCC","FERC","FHFA","FLRA","FMSHRC","FRB","FTC","GSA","GSEC","GTA","HHS_FDA","HHS_NIH","MCC","MMC","MSPB","NARA","NASA","NCD","NCPC","NCUA","NEA","NEH","NLRB","NMB","NRC","NSF","NTSB","NWTRB","OGE","ONHIR","OPM","OSC","OSHRC","PBGC","PC","PCLOB","PRC","PT","RRB","SBA","SEC","SSA","SSAB","SSS","STB","TREAS","TVA","UDALL","USAB","USAGM","USAID","USCCR","USDA","USIBWC","USICH","USITC","USTDA","VA"]: - # continue - - # if org_code == "HHS_FDA": - # go = 1 - # continue - # if go != 1: - # continue - # Rapidgator%20 DOI_BIA - - LOGGER.info("Running on %s", org_code) + LOGGER.info(f"-- Generating report for {org_code} ({org_idx+1} of {len(pe_orgs)}) --") # Create folders in output directory for dir_name in ("ppt", org_code): @@ -249,7 +245,7 @@ def generate_reports(datestring, output_directory, soc_med_included=False, demo= ) # Create ASM Summary - LOGGER.info("Creating ASM Summary") + LOGGER.info("Creating ASM summary") summary_filename = f"{output_directory}/Posture-and-Exposure-ASM-Summary_{org_code}_{scorecard_dict['end_date'].strftime('%Y-%m-%d')}.pdf" final_summary_output = f"{output_directory}/{org_code}/Posture-and-Exposure-ASM-Summary_{org_code}_{scorecard_dict['end_date'].strftime('%Y-%m-%d')}.pdf" summary_json_filename = f"{output_directory}/{org_code}/ASM_Summary.json" @@ -262,13 +258,13 @@ def generate_reports(datestring, output_directory, soc_med_included=False, demo= summary_json_filename, summary_excel_filename, ) - LOGGER.info("Done") + LOGGER.info("Finished creating ASM summary") # Create scorecard - LOGGER.info("Creating scorecard") + # LOGGER.info("Creating scorecard") # scorecard_filename = f"{output_directory}/{org_code}/Posture-and-Exposure-Scorecard_{org_code}_{scorecard_dict['end_date'].strftime('%Y-%m-%d')}.pdf" # create_scorecard(scorecard_dict, scorecard_filename) - LOGGER.info("Done") + # LOGGER.info("Finished creating scorecard") # Convert to HTML to PDF output_filename = f"{output_directory}/Posture_and_Exposure_Report-{org_code}-{datestring}.pdf" @@ -330,7 +326,8 @@ def generate_reports(datestring, output_directory, soc_med_included=False, demo= "Connection to pe database failed and/or there are 0 organizations stored." ) - LOGGER.info("%s reports generated", generated_reports) + LOGGER.info(f"In total, {generated_reports}/{len(pe_orgs)} reports were generated") + LOGGER.info(f"Generated reports have been output to the directory: {output_directory}") def main(): @@ -370,7 +367,9 @@ def main(): level=log_level.upper(), ) - LOGGER.info("Loading Posture & Exposure Report, Version : %s", __version__) + LOGGER.info("--- PE Report Generation Starting ---") + LOGGER.info("Posture & Exposure Report, Version : %s", __version__) + report_gen_start_time = time.time() # Create output directory if not os.path.exists(validated_args["OUTPUT_DIRECTORY"]): @@ -384,7 +383,10 @@ def main(): validated_args["--demo"], ) - LOGGER.info("%s reports generated", generated_reports) + report_gen_end_time = time.time() + report_gen_exe_time = str(timedelta(seconds=(report_gen_end_time - report_gen_start_time))) + LOGGER.info(f"Execution time for PE report generation: {report_gen_exe_time} (H:M:S)") + LOGGER.info("--- PE Report Generation Complete ---") # Stop logging and clean up logging.shutdown() diff --git a/src/pe_reports/reportlab_generator.py b/src/pe_reports/reportlab_generator.py index 9e4ccf48..7980f3d3 100644 --- a/src/pe_reports/reportlab_generator.py +++ b/src/pe_reports/reportlab_generator.py @@ -169,8 +169,7 @@ def format_table( # Remove emojis from content because the report generator can't display them print(str(cell)) cell = Paragraph( - demoji.replace(str(cell), "").replace("&", "[and]"), - column_style_list[current_cell], + demoji.replace(str(cell), "").replace("&", "[and]"), column_style_list[current_cell] ) current_row.append(cell) diff --git a/src/pe_source/cybersixgill.py b/src/pe_source/cybersixgill.py index 82f3dc93..acc1972b 100644 --- a/src/pe_source/cybersixgill.py +++ b/src/pe_source/cybersixgill.py @@ -3,7 +3,9 @@ # Standard Python Libraries from datetime import date, datetime, timedelta import logging +import pandas as pd import sys +import time import traceback from .data.pe_db.db_query_source import ( @@ -42,7 +44,6 @@ START_DATE_TIME = (NOW - DAYS_BACK).strftime("%Y-%m-%d %H:%M:%S") END_DATE_TIME = NOW.strftime("%Y-%m-%d %H:%M:%S") -# Setup logging LOGGER = logging.getLogger(__name__) @@ -101,7 +102,8 @@ def run_cybersixgill(self): for pe_org in pe_orgs_final: list = list + pe_org["cyhy_db_name"] + "," print(list) - for pe_org in pe_orgs_final: + + for org_idx, pe_org in enumerate(pe_orgs_final): org_id = pe_org["cyhy_db_name"] pe_org_uid = pe_org["organizations_uid"] # Only run on specified orgs @@ -111,13 +113,14 @@ def run_cybersixgill(self): try: sixgill_org_id = sixgill_orgs[org_id][0] except KeyError as err: - LOGGER.error("PE org is not listed in Cybersixgill.") - print(err, file=sys.stderr) - failed.append("%s not in sixgill" % org_id) + LOGGER.warning(f"{org_id} is not registered in Cybersixgill") + # print(err, file=sys.stderr) + # failed.append("%s not in sixgill" % org_id) continue # Run alerts if "alerts" in method_list: + LOGGER.info(f"Fetching alert data for {org_id} ({org_idx+1} of {len(pe_orgs_final)})") if ( self.get_alerts( org_id, @@ -131,6 +134,7 @@ def run_cybersixgill(self): failed.append("%s alerts" % org_id) # Run mentions if "mentions" in method_list: + LOGGER.info(f"Fetching mention data for {org_id} ({org_idx+1} of {len(pe_orgs_final)})") if ( self.get_mentions( org_id, @@ -144,6 +148,7 @@ def run_cybersixgill(self): failed.append("%s mentions" % org_id) # Run credentials if "credentials" in method_list: + LOGGER.info(f"Fetching credential data for {org_id} ({org_idx+1} of {len(pe_orgs_final)})") if ( self.get_credentials( org_id, sixgill_org_id, pe_org_uid, source_uid @@ -158,7 +163,6 @@ def get_alerts( self, org_id, sixgill_org_id, pe_org_uid, source_uid, soc_med_included ): """Get alerts.""" - LOGGER.info("Fetching alert data for %s.", org_id) soc_med_platforms = [ "twitter", "Twitter", @@ -179,7 +183,7 @@ def get_alerts( ] # Fetch alert data with sixgill_org_id try: - print(sixgill_org_id) + # print(sixgill_org_id) alerts_df = alerts(sixgill_org_id) if not soc_med_included: alerts_df = alerts_df[~alerts_df["site"].isin(soc_med_platforms)] @@ -190,7 +194,7 @@ def get_alerts( # Rename columns alerts_df = alerts_df.rename(columns={"id": "sixgill_id"}) except Exception as e: - LOGGER.error("Failed fetching alert data for %s", org_id) + LOGGER.error("Failed fetching total alert count for %s", org_id) LOGGER.error(e) print(traceback.format_exc()) return 1 @@ -201,18 +205,18 @@ def get_alerts( # Fetch organization assets org_assets_dict = all_assets_list(sixgill_org_id) for alert_index, alert_row in alerts_df.iterrows(): - print(org_id) + # print(org_id) try: alert_id = alert_row["sixgill_id"] - content_snip, asset_mentioned, asset_type = get_alerts_content( - sixgill_org_id, alert_id, org_assets_dict - ) + # content_snip, asset_mentioned, asset_type = get_alerts_content( + # sixgill_org_id, alert_id, org_assets_dict + # ) alerts_df.at[alert_index, "content_snip"] = content_snip alerts_df.at[alert_index, "asset_mentioned"] = asset_mentioned alerts_df.at[alert_index, "asset_type"] = asset_type - except Exception: + except Exception as e: # LOGGER.error( # "Failed fetching a specific alert content for %s", org_id # ) @@ -241,7 +245,6 @@ def get_mentions( self, org_id, sixgill_org_id, pe_org_uid, source_uid, soc_med_included ): """Get mentions.""" - LOGGER.info("Fetching mention data for %s.", org_id) # Fetch org aliases from Cybersixgill try: aliases = alias_organization(sixgill_org_id) @@ -251,6 +254,7 @@ def get_mentions( LOGGER.error(e) return 1 + mentions_df = None # Fetch mention data try: if "dhs" in aliases: @@ -267,7 +271,7 @@ def get_mentions( if "st" in aliases: aliases.remove("st") if "nih" in aliases: - aliases.remove("noh") + aliases.remove("nih") if "blm" in aliases: aliases.remove("blm") if "ed" in aliases: @@ -315,20 +319,24 @@ def get_mentions( if "stb" in aliases: aliases.remove("stb") aliases.append("surface transportation") - try: - mentions_df = mentions(DATE_SPAN, aliases, soc_med_included) - except UnboundLocalError: - return 1 - mentions_df = mentions_df.rename(columns={"id": "sixgill_mention_id"}) - mentions_df["organizations_uid"] = pe_org_uid - # Add data source uid - mentions_df["data_source_uid"] = source_uid + # Retrieve mention data + mentions_df = mentions(DATE_SPAN, aliases, soc_med_included) except Exception as e: LOGGER.error("Failed fetching mentions for %s", org_id) print(traceback.format_exc()) LOGGER.error(e) return 1 + # Catch no mentions found situation: + if mentions_df.empty: + LOGGER.info(f"No mention data found for {org_id}, moving on") + return 0 + + # Format data + mentions_df = mentions_df.rename(columns={"id": "sixgill_mention_id"}) + mentions_df["organizations_uid"] = pe_org_uid + mentions_df["data_source_uid"] = source_uid + # Insert mention data into the PE database try: insert_sixgill_mentions(mentions_df) @@ -341,7 +349,6 @@ def get_mentions( def get_credentials(self, org_id, sixgill_org_id, pe_org_uid, source_uid): """Get credentials.""" - LOGGER.info("Fetching credential data for %s.", org_id) # Fetch org root domains from Cybersixgill try: roots = root_domains(sixgill_org_id) @@ -351,24 +358,52 @@ def get_credentials(self, org_id, sixgill_org_id, pe_org_uid, source_uid): LOGGER.error(e) return 1 + # Catch no root assets situation + if len(roots) == 0: + LOGGER.warning(f"{org_id} does not have any root domain assets in Cybersixgill") + return 0 + # Fetch credential data - try: - creds_df = creds(roots, START_DATE_TIME, END_DATE_TIME) - LOGGER.info("Found %s credentials.", len(creds_df.index)) - creds_df["organizations_uid"] = pe_org_uid - # Add data source uid - creds_df["data_source_uid"] = source_uid - except Exception as e: - LOGGER.error("Failed fetching credentials for %s", org_id) - LOGGER.error(e) - return 1 + if len(roots) > 100: + # Catch situation where an org has >100 roots in sixgill + LOGGER.info(f"{org_id} has more than 100 root assets in cybersixgill, breaking into chunks of 100...") + root_chunks = [roots[i:i + 100] for i in range(0, len(roots), 100)] + creds_df = pd.DataFrame() + for idx, chunk in enumerate(root_chunks): + try: + LOGGER.info(f"On chunk {idx+1} of {len(root_chunks)} for {org_id} credentials") + chunk_creds_df = creds(chunk, START_DATE_TIME, END_DATE_TIME) + LOGGER.info("Found %s credentials for this chunk", len(chunk_creds_df.index)) + chunk_creds_df["organizations_uid"] = pe_org_uid + chunk_creds_df["data_source_uid"] = source_uid + creds_df = creds_df.append(chunk_creds_df, ignore_index=True) + except Exception as e: + LOGGER.error("Failed fetching credential chunk for %s", org_id) + LOGGER.error(e) + return 1 + LOGGER.info("Found %s credentials in total", len(creds_df.index)) + else: + # Otherwise, just fetch credential data + try: + creds_df = creds(roots, START_DATE_TIME, END_DATE_TIME) + LOGGER.info("Found %s credentials.", len(creds_df.index)) + creds_df["organizations_uid"] = pe_org_uid + creds_df["data_source_uid"] = source_uid + except Exception as e: + LOGGER.error("Failed fetching credentials for %s", org_id) + LOGGER.error(e) + return 1 + + # Catch no credentials found situation + if creds_df.empty: + LOGGER.info("No credential findings for this org, moving on") + return 0 # Change empty and ambiguous breach names try: creds_df.loc[ creds_df["breach_name"] == "", "breach_name" ] = "Cybersixgill_" + creds_df["breach_id"].astype(str) - creds_df.loc[ creds_df["breach_name"] == "Automatic leaked credentials detection", "breach_name", @@ -405,7 +440,7 @@ def get_credentials(self, org_id, sixgill_org_id, pe_org_uid, source_uid): ) creds_breach_df.drop(columns=["exposed_cred_count"], inplace=True) except Exception as e: - LOGGER.error("Probably no credential breaches for %s", org_id) + LOGGER.error("Error formatting credential breach data for %s", org_id) LOGGER.error(e) return 1 @@ -453,8 +488,7 @@ def get_credentials(self, org_id, sixgill_org_id, pe_org_uid, source_uid): def get_topCVEs(self, source_uid): """Get top CVEs.""" - LOGGER.info("Fetching top CVE data.") - + LOGGER.info(f"Fetching the top ten CVEs for the past report period") # Fetch top CVE data try: top_cve_df = top_cves(10) diff --git a/src/pe_source/data/pe_db/db_query_source.py b/src/pe_source/data/pe_db/db_query_source.py index d26c7091..14192d6a 100644 --- a/src/pe_source/data/pe_db/db_query_source.py +++ b/src/pe_source/data/pe_db/db_query_source.py @@ -2,6 +2,7 @@ # Standard Python Libraries from datetime import datetime +from decimal import Decimal import json import logging import socket @@ -21,14 +22,15 @@ from pe_reports.data.db_query import task_api_call # Setup logging to central file -LOGGER = app.config["LOGGER"] +LOGGER = logging.getLogger(__name__) CONN_PARAMS_DIC = config() CONN_PARAMS_DIC_STAGING = staging_config() # These need to filled with API key/url path in database.ini -pe_api_key = CONN_PARAMS_DIC_STAGING.get("pe_api_key") -pe_api_url = CONN_PARAMS_DIC_STAGING.get("pe_api_url") +API_DIC = staging_config(section="pe_api") +pe_api_key = API_DIC.get("pe_api_key") +pe_api_url = API_DIC.get("pe_api_url") def show_psycopg2_exception(err): @@ -154,6 +156,16 @@ def insert_sixgill_alerts(new_alerts): LOGGER.info( "Working on chunk " + str(chunk_ct) + " of " + str(len(chunked_list)) ) + # Check total content field data size for this chunk + total_content_size = sum([len(entry["content"]) for entry in chunk]) + # If total content field size is too big, trim content field for this chunk + if total_content_size > 400000: + LOGGER.warning("Excessive alert content data for this chunk, trimming...") + for entry in chunk: + over_limit = len(entry["content"]) > 2000 + entry["content"] = entry["content"][:2000] + if over_limit: + entry["content"] += "\n[content has been trimmed for space savings]" # Endpoint info task_url = "alerts_insert" status_url = "alerts_insert/task/" @@ -993,7 +1005,7 @@ def get_data_source_uid(source): source: The name of the specified data source Return: - UID for the specified data source + Data for the specified data source """ # Endpoint info endpoint_url = pe_api_url + "data_source_by_name" @@ -1071,8 +1083,8 @@ def getSubdomain(domain): try: result = requests.post(endpoint_url, headers=headers, data=data).json() # Process data and return - final_result = result[0] - return final_result + tup_result = [tuple(row.values()) for row in result] + return tup_result[0][0] except requests.exceptions.HTTPError as errh: LOGGER.error(errh) except requests.exceptions.ConnectionError as errc: @@ -1472,14 +1484,37 @@ def insert_shodan_vulns(dataframe, table, thread, org_name, failed): def get_ips(org_uid): """Get IP data.""" conn = connect() - sql = """SELECT wa.asset as ip_address - FROM web_assets wa - WHERE wa.organizations_uid = %(org_uid)s - and wa.report_on = True - """ - df = pd.read_sql(sql, conn, params={"org_uid": org_uid}) - ips = list(df["ip_address"].values) + sql1 = """SELECT i.ip_hash, i.ip, ct.network FROM ips i + JOIN cidrs ct on ct.cidr_uid = i.origin_cidr + JOIN organizations o on o.organizations_uid = ct.organizations_uid + where o.organizations_uid = %(org_uid)s + and i.origin_cidr is not null + and i.shodan_results is True + and i.current;""" + df1 = pd.read_sql(sql1, conn, params={"org_uid": org_uid}) + ips1 = list(df1["ip"].values) + + sql2 = """select i.ip_hash, i.ip + from ips i + join ips_subs is2 ON i.ip_hash = is2.ip_hash + join sub_domains sd on sd.sub_domain_uid = is2.sub_domain_uid + join root_domains rd on rd.root_domain_uid = sd.root_domain_uid + JOIN organizations o on o.organizations_uid = rd.organizations_uid + where o.organizations_uid = %(org_uid)s + and i.shodan_results is True + and sd.current + and i.current;""" + df2 = pd.read_sql(sql2, conn, params={"org_uid": org_uid}) + ips2 = list(df2["ip"].values) + + in_first = set(ips1) + in_second = set(ips2) + + in_second_but_not_in_first = in_second - in_first + + ips = ips1 + list(in_second_but_not_in_first) conn.close() + return ips @@ -2274,7 +2309,7 @@ def insert_shodan_data(dataframe, table, thread, org_name, failed): tpls, ) conn.commit() - logging.info( + LOGGER.info( "{} Data inserted using execute_values() successfully - {}".format( thread, org_name ) diff --git a/src/pe_source/data/shodan_db/shodan_search.py b/src/pe_source/data/shodan_db/shodan_search.py index 27aaeab3..286f9446 100644 --- a/src/pe_source/data/shodan_db/shodan_search.py +++ b/src/pe_source/data/shodan_db/shodan_search.py @@ -11,23 +11,24 @@ import shodan # cisagov Libraries -from pe_source.data.pe_db.db_query_source import ( +from pe_source.data.pe_db.db_query_source import ( # get_ips_dhs,; get_ips_hhs,; get_ips_nasa, get_data_source_uid, get_ips, insert_shodan_data, ) -# Setup logging LOGGER = logging.getLogger(__name__) def run_shodan_thread(api, org_chunk, thread_name): """Run a Shodan thread.""" failed = [] - for org in org_chunk: + warnings = [] + for org_idx, org in enumerate(org_chunk): org_name = org["cyhy_db_name"] org_uid = org["organizations_uid"] - LOGGER.info("{} Running IPs for {}".format(thread_name, org_name)) + # LOGGER.info("{} Running IPs for {}".format(thread_name, org_name)) + LOGGER.info(f"{thread_name}: Running Shodan on {org_name}") start, end = get_dates() try: ips = get_ips(org_uid) @@ -38,14 +39,17 @@ def run_shodan_thread(api, org_chunk, thread_name): continue if len(ips) == 0: - LOGGER.error("{} No IPs for {}.".format(thread_name, org_name)) - failed.append("{} has 0 IPs".format(org_name)) + LOGGER.warning("{} No IPs for {}.".format(thread_name, org_name)) + warnings.append("{} has 0 IPs".format(org_name)) continue failed = search_shodan( thread_name, ips, api, start, end, org_uid, org_name, failed ) + if len(warnings) > 0: + LOGGER.warning(f"{thread_name} Warnings: {warnings}") + if len(failed) > 0: LOGGER.critical("{} Failures: {}".format(thread_name, failed)) @@ -161,6 +165,9 @@ def search_shodan(thread_name, ips, api, start, end, org_uid, org_name, failed): "timestamp": d["timestamp"], "type": ftype, "is_verified": False, + "cpe": d.get("cpe", None), + "banner": d.get("data", None), + "version": d.get("version", None) } ) elif d["_shodan"]["module"] in risky_ports: @@ -202,6 +209,9 @@ def search_shodan(thread_name, ips, api, start, end, org_uid, org_name, failed): "timestamp": d["timestamp"], "type": ftype, "is_verified": False, + "cpe": d.get("cpe", None), + "banner": d.get("data", None), + "version": d.get("version", None) } ) @@ -221,7 +231,7 @@ def search_shodan(thread_name, ips, api, start, end, org_uid, org_name, failed): "tags": r["tags"], "timestamp": d["timestamp"], "country_code": location["country_code"], - "location": str(location), + "location": str(location) } ) diff --git a/src/pe_source/data/sixgill/api.py b/src/pe_source/data/sixgill/api.py index 5a728c1b..c1156e5f 100755 --- a/src/pe_source/data/sixgill/api.py +++ b/src/pe_source/data/sixgill/api.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python """Cybersixgill API calls.""" # Standard Python Libraries import json @@ -13,12 +12,12 @@ # cisagov Libraries from pe_source.data.pe_db.config import cybersix_token -# Setup logging LOGGER = logging.getLogger(__name__) def get_sixgill_organizations(): """Get the list of organizations.""" + # Call Cybersixgill's /organization endpoint url = "https://api.cybersixgill.com/multi-tenant/organization" auth = cybersix_token() headers = { @@ -26,15 +25,26 @@ def get_sixgill_organizations(): "Cache-Control": "no-cache", "Authorization": "Bearer " + auth, } - orgs = requests.get(url, headers=headers).json() + orgs = requests.get(url, headers=headers) + # Retry clause in case Cybersixgill's API falters + retry_count, max_retries, time_delay = 0, 10, 5 + while orgs.status_code != 200 and retry_count < max_retries: + endpoint_name = url.split('/')[-1] + LOGGER.warning(f"Retrying Cybersixgill /{endpoint_name} endpoint, attmept {retry_count+1} of {max_retries}") + time.sleep(time_delay) + orgs = requests.get(url, headers=headers) + retry_count += 1 + orgs = orgs.json() df_orgs = pd.DataFrame(orgs) df_orgs = df_orgs[["name", "organization_id"]] sixgill_dict = df_orgs.set_index("name").agg(list, axis=1).to_dict() + # Return results return sixgill_dict def org_assets(org_id): """Get organization assets.""" + # Call Cybersixgill's /assets endpoint url = f"https://api.cybersixgill.com/multi-tenant/organization/{org_id}/assets" auth = cybersix_token() headers = { @@ -43,22 +53,23 @@ def org_assets(org_id): "Authorization": "Bearer " + auth, } payload = {"organization_id": org_id} - count = 1 - while count < 7: - try: - resp = requests.get(url, headers=headers, params=payload).json() - break - except Exception: - time.sleep(5) - LOGGER.info("Error. Trying query post again...") - count += 1 - continue - resp = requests.get(url, headers=headers, params=payload).json() + resp = requests.get(url, headers=headers, params=payload) + # Retry clause in case Cybersixgill's API falters + retry_count, max_retries, time_delay = 0, 10, 5 + while resp.status_code != 200 and retry_count < max_retries: + endpoint_name = url.split('/')[-1] + LOGGER.warning(f"Retrying Cybersixgill /{endpoint_name} endpoint, attmept {retry_count+1} of {max_retries}") + time.sleep(time_delay) + resp = requests.get(url, headers=headers, params=payload) + retry_count += 1 + resp = resp.json() + # Return result return resp def intel_post(auth, query, frm, scroll, result_size): """Get intel items - advanced variation.""" + # Call Cybersixgill's /intel_items endpoint url = "https://api.cybersixgill.com/intel/intel_items" headers = { "Content-Type": "application/json", @@ -77,12 +88,23 @@ def intel_post(auth, query, frm, scroll, result_size): "recent_items": False, "safe_content_size": True, } - resp = requests.post(url, headers=headers, json=payload).json() + resp = requests.post(url, headers=headers, json=payload) + # Retry clause in case Cybersixgill's API falters + retry_count, max_retries, time_delay = 0, 10, 5 + while resp.status_code != 200 and retry_count < max_retries: + endpoint_name = url.split('/')[-1] + LOGGER.warning(f"Retrying Cybersixgill /{endpoint_name} endpoint, attmept {retry_count+1} of {max_retries}") + time.sleep(time_delay) + resp = requests.post(url, headers=headers, json=payload) + retry_count += 1 + resp = resp.json() + # Return result return resp def alerts_list(auth, organization_id, fetch_size, offset): """Get actionable alerts by ID using organization_id with optional filters.""" + # Call Cybersixgill's /actionable-alert endpoint url = "https://api.cybersixgill.com/alerts/actionable-alert" headers = { "Content-Type": "application/json", @@ -95,11 +117,26 @@ def alerts_list(auth, organization_id, fetch_size, offset): "offset": offset, } resp = requests.get(url, headers=headers, params=payload) + # Catch possible 400 error code + if resp.status_code == 400: + LOGGER.error("Received error code 400 from Cybersixgill's /actionable-alert endpoint") + LOGGER.error(resp.content) + # Retry clause in case Cybersixgill's API falters + retry_count, max_retries, time_delay = 0, 10, 5 + while resp.status_code != 200 and retry_count < max_retries: + endpoint_name = url.split('/')[-1] + LOGGER.warning(f"Retrying Cybersixgill /{endpoint_name} endpoint (code {resp.status_code}) for chunk at offset {offset} , attempt {retry_count+1} of {max_retries}") + time.sleep(time_delay) + resp = requests.get(url, headers=headers, params=payload) + retry_count += 1 + resp = resp.json() + # Return result return resp def alerts_count(auth, organization_id): """Get the total read and unread actionable alerts by organization.""" + # Call Cybersixgill's /count endpoint url = "https://api.cybersixgill.com/alerts/actionable_alert/count" headers = { "Content-Type": "application/json", @@ -107,12 +144,23 @@ def alerts_count(auth, organization_id): "Authorization": "Bearer " + auth, } payload = {"organization_id": organization_id} - resp = requests.get(url, headers=headers, params=payload).json() + resp = requests.get(url, headers=headers, params=payload) + # Retry clause in case Cybersixgill's API falters + retry_count, max_retries, time_delay = 0, 10, 5 + while resp.status_code != 200 and retry_count < max_retries: + endpoint_name = url.split('/')[-1] + LOGGER.warning(f"Retrying Cybersixgill /{endpoint_name} endpoint, attmept {retry_count+1} of {max_retries}") + time.sleep(time_delay) + resp = requests.get(url, headers=headers, params=payload) + retry_count += 1 + resp = resp.json() + # Return result return resp def alerts_content(auth, organization_id, alert_id): """Get total alert content.""" + # Call Cybersixgill's /actionable_alert_content endpoint url = f"https://api.cybersixgill.com/alerts/actionable_alert_content/{alert_id}" headers = { "Content-Type": "application/json", @@ -120,7 +168,16 @@ def alerts_content(auth, organization_id, alert_id): "Authorization": "Bearer " + auth, } payload = {"organization_id": organization_id, "limit": 10000} - content = requests.get(url, headers=headers, params=payload).json() + content = requests.get(url, headers=headers, params=payload) + # Retry clause in case Cybersixgill's API falters + retry_count, max_retries, time_delay = 0, 10, 5 + while content.status_code != 200 and retry_count < max_retries: + endpoint_name = url.split('/')[-1] + LOGGER.warning(f"Retrying Cybersixgill /actionable_alert_content endpoint, attmept {retry_count+1} of {max_retries}") + time.sleep(time_delay) + content = requests.get(url, headers=headers, params=payload) + retry_count += 1 + content = content.json() try: content = content["content"]["items"][0] if "_source" in content: @@ -132,13 +189,14 @@ def alerts_content(auth, organization_id, alert_id): except Exception as e: LOGGER.error("Failed getting content snip: %s", e) content = "" + # Return result return content def dve_top_cves(): """Retrieve the top 10 CVEs for this report period.""" + # Call Cybersixgill's /enrich endpoint url = "https://api.cybersixgill.com/dve_enrich/enrich" - # Used to be: https://api.cybersixgill.com/dve_enrich/top_cves auth = cybersix_token() headers = { "Content-Type": "application/json", @@ -148,36 +206,33 @@ def dve_top_cves(): data = json.dumps( { "filters": { - "sixgill_rating_range": {"from": 8, "to": 10}, + "sixgill_rating_range": {"from": 6, "to": 10}, }, "results_size": 10, "enriched": True, "from_index": 0, } ) - resp = requests.post(url, headers=headers, data=data).json() - - # old version needed sorting: - # sorted_values = sorted( - # resp["objects"], - # key=lambda x: x["score"]["sixgill"]["current"] - # if x["score"]["sixgill"]["current"] is not None - # else float("-inf"), - # reverse=True, - # ) - # top_10_cves = sorted_values[:10] - + resp = requests.post(url, headers=headers, data=data) + # Retry clause in case Cybersixgill's API falters + retry_count, max_retries, time_delay = 0, 10, 5 + while resp.status_code != 200 and retry_count < max_retries: + endpoint_name = url.split('/')[-1] + LOGGER.warning(f"Retrying Cybersixgill /{endpoint_name} endpoint, attmept {retry_count+1} of {max_retries}") + time.sleep(time_delay) + resp = requests.post(url, headers=headers, data=data) + retry_count += 1 + resp = resp.json() + # Sort and clean top CVE data result_list = resp.get("objects") clean_top_10_cves = [] for result in result_list: cve_id = result.get("name") - dynamic_rating = result.get("x_sixgill_info").get("score").get("current") + dynamic_rating = result.get("x_sixgill_info").get("rating").get("current") if result.get("x_sixgill_info").get("nvd").get("v3") is None: nvd_v3_score = None else: - nvd_v3_score = ( - result.get("x_sixgill_info").get("nvd").get("v3").get("current") - ) + nvd_v3_score = result.get("x_sixgill_info").get("nvd").get("v3").get("current") nvd_base_score = "{'v2': None, 'v3': " + str(nvd_v3_score) + "}" clean_cve = { "cve_id": cve_id, @@ -185,12 +240,12 @@ def dve_top_cves(): "nvd_base_score": nvd_base_score, } clean_top_10_cves.append(clean_cve) - + # Return result return clean_top_10_cves - def credential_auth(params): """Get data about a specific CVE.""" + # Call Cybersixgill's /leaks endpoint url = "https://api.cybersixgill.com/credentials/leaks" auth = cybersix_token() headers = { @@ -198,7 +253,17 @@ def credential_auth(params): "Cache-Control": "no-cache", "Authorization": "Bearer " + auth, } - resp = requests.get(url, headers=headers, params=params).json() + resp = requests.get(url, headers=headers, params=params) + # Retry clause in case Cybersixgill's API falters + retry_count, max_retries, time_delay = 0, 10, 5 + while resp.status_code != 200 and retry_count < max_retries: + endpoint_name = url.split('/')[-1] + LOGGER.warning(f"Retrying Cybersixgill /{endpoint_name} endpoint, attmept {retry_count+1} of {max_retries}") + time.sleep(time_delay) + resp = requests.get(url, headers=headers, params=params) + retry_count += 1 + resp = resp.json() + # Return result return resp @@ -234,24 +299,29 @@ def setOrganizationUsers(org_id): id_role1 = "610017c216948d7efa077a52" csg_role_id = "role_id" csg_user_id = "user_id" + for user in getUserInfo(): userrole = user[csg_role_id] user_id = user[csg_user_id] + if ( (userrole == role1) and (user_id != id_role1) or userrole == role2 and user_id != id_role1 ): + url = ( f"https://api.cybersixgill.com/multi-tenant/organization/" f"{org_id}/user/{user_id}?role_id={userrole}" ) + headers = { "Content-Type": "application/json", "Cache-Control": "no-cache", "Authorization": f"Bearer {cybersix_token()}", } + response = requests.post(url, headers=headers).json() LOGGER.info("The response is %s", response) @@ -270,11 +340,13 @@ def setOrganizationDetails(org_id, orgAliases, orgDomain, orgIP, orgExecs): } ) url = f"https://api.cybersixgill.com/multi-tenant/" f"organization/{org_id}/assets" + headers = { "Content-Type": "application/json", "Cache-Control": "no-cache", "Authorization": f"Bearer {cybersix_token()}", } + response = requests.put(url, headers=headers, data=newOrganizationDetails).json() LOGGER.info("The response is %s", response) @@ -282,12 +354,15 @@ def setOrganizationDetails(org_id, orgAliases, orgDomain, orgIP, orgExecs): def getUserInfo(): """Get all organization details from Cybersixgill via API.""" url = "https://api.cybersixgill.com/multi-tenant/organization" + headers = { "Content-Type": "application/json", "Cache-Control": "no-cache", "Authorization": f"Bearer {cybersix_token()}", } + response = requests.get(url, headers=headers).json() + userInfo = response[1]["assigned_users"] return userInfo @@ -304,6 +379,7 @@ def get_bulk_cve_resp(cve_list): Raw API response for CVE list """ + # Call Cybersixgill's /enrich endpoint c6g_url = "https://api.cybersixgill.com/dve_enrich/enrich" auth = cybersix_token() headers = { @@ -316,11 +392,15 @@ def get_bulk_cve_resp(cve_list): "results_size": len(cve_list), "from_index": 0, } - # Make API call for specified CVE list - try: - # Attempt API call - resp = requests.post(c6g_url, headers=headers, json=body).json() - # Return response - return resp - except Exception as e: - LOGGER.error("Error making bulk CVE API call: %s", e) + resp = requests.post(c6g_url, headers=headers, json=body) + # Retry clause in case Cybersixgill's API falters + retry_count, max_retries, time_delay = 0, 10, 5 + while resp.status_code != 200 and retry_count < max_retries: + endpoint_name = url.split('/')[-1] + LOGGER.warning(f"Retrying Cybersixgill /{endpoint_name} endpoint, attmept {retry_count+1} of {max_retries}") + time.sleep(time_delay) + resp = requests.get(url, headers=headers, params=params) + retry_count += 1 + resp = resp.json() + # Return results + return resp diff --git a/src/pe_source/data/sixgill/source.py b/src/pe_source/data/sixgill/source.py index d0391232..6146608f 100644 --- a/src/pe_source/data/sixgill/source.py +++ b/src/pe_source/data/sixgill/source.py @@ -22,7 +22,6 @@ org_assets, ) -# Setup logging LOGGER = logging.getLogger(__name__) @@ -59,6 +58,7 @@ def root_domains(org_id): def mentions(date, aliases, soc_media_included=False): """Pull dark web mentions data for an organization.""" token = cybersix_token() + # Build the query using the org's aliases mentions = "" for mention in aliases: @@ -78,19 +78,22 @@ def mentions(date, aliases, soc_media_included=False): linkedin, Linkedin, discord, forum_discord, raddle, telegram, jabber, ICQ, icq, mastodon)""" ) + # Get the total number of mentions - count = 1 - while count < 7: - try: - LOGGER.info("Total mentions try #%s", count) - resp = intel_post(token, query, frm=0, scroll=False, result_size=1) - break - except Exception: - LOGGER.info("Error. Trying to get mentions count again...") - count += 1 - continue - total_mentions = resp["total_intel_items"] + try: + LOGGER.info(f"Retrieving total numnber of mentions") + resp = intel_post(token, query, frm=0, scroll=False, result_size=1) + total_mentions = resp["total_intel_items"] + except Exception as e: + LOGGER.error("Total mentions count retrieval failed") + LOGGER.error(e) + LOGGER.info("Total Mentions: %s", total_mentions) + + # Catch situation where org has 0 mentions + if total_mentions == 0: + return pd.DataFrame() + # Fetch mentions in segments # Recommended segment is 50. The maximum is 400. i = 0 @@ -141,13 +144,13 @@ def mentions(date, aliases, soc_media_included=False): smaller_segment_count = 1 else: segment_size = 10 - LOGGER.error( + LOGGER.warning( "Failed 3 times. Switching to a segment size of %s", segment_size, ) try_count = 1 continue - LOGGER.error("Try %s/3 failed.", try_count) + LOGGER.warning("Mentions segment retieval failed, try %s/3", try_count) try_count += 1 return df_all_mentions @@ -159,25 +162,39 @@ def alerts(org_id): LOGGER.info(count) count_total = count["total"] LOGGER.info("Total Alerts: %s", count_total) + # Recommended "fetch_size" is 25. The maximum is 400. - fetch_size = 25 + fetch_size = 50 all_alerts = [] - + df_all_alerts = pd.DataFrame() + token_refresh_counter = 1 for offset in range(0, count_total, fetch_size): + # Keep API auth token refreshed (they expire after 30min) + if token_refresh_counter % 100 == 0: + # Set to refresh every 100 chunks + # this needs to be adjusted depending on chunk size + LOGGER.warning("API auth token refreshed due to long alert retrieval time...") + token = cybersix_token() + token_refresh_counter += 1 + # Retrieve alert data for this chunk try: - resp = alerts_list(token, org_id, fetch_size, offset).json() + print(f"Working on alert chunk at offset {offset} out of {count_total}") + resp = alerts_list(token, org_id, fetch_size, offset) df_alerts = pd.DataFrame.from_dict(resp) + df_alerts.drop(columns=["sub_alerts"], inplace=True) # large unused data field all_alerts.append(df_alerts) df_all_alerts = pd.concat(all_alerts).reset_index(drop=True) except Exception as e: - print(e) - print("HAD TO CONTINUE THROUGH ALERT CHUNK") + LOGGER.error(f"Issue fetching alert data chunk at offset: {offset}") + LOGGER.error(e) continue + # Fetch the full content of each alert # for i, r in df_all_alerts.iterrows(): # print(r["id"]) # content = alerts_content(org_id, r["id"]) - # df_all_alerts.at[i, "content"] = content + # df_all_alerts.at[i, "content"] + return df_all_alerts diff --git a/src/pe_source/dnsmonitor.py b/src/pe_source/dnsmonitor.py index bc064cd2..49109586 100644 --- a/src/pe_source/dnsmonitor.py +++ b/src/pe_source/dnsmonitor.py @@ -19,15 +19,14 @@ getSubdomain, ) -# Setup logging -LOGGER = logging.getLogger(__name__) - NOW = datetime.datetime.now() DAYS_BACK = datetime.timedelta(days=20) DAY = datetime.timedelta(days=1) START_DATE = NOW - DAYS_BACK END_DATE = NOW + DAY +LOGGER = logging.getLogger(__name__) + class DNSMonitor: """Fetch DNSMonitor data.""" @@ -70,32 +69,33 @@ def run_dnsMonitor(self): domain_df = get_monitored_domains(token) failed = [] + warnings = [] # Iterate through each org - for org in pe_orgs_final: + for org_idx, org in enumerate(pe_orgs_final): org_name = org["name"] org_uid = org["organizations_uid"] org_code = org["cyhy_db_name"] - LOGGER.info("\nRunning DNSMonitor on %s", org_code) + LOGGER.info(f"Running DNSMonitor on {org_code} ({org_idx+1} of {len(pe_orgs_final)})") # Get respective domain IDs domain_ids = domain_df[domain_df["org"] == org_name] - LOGGER.info("Found %s root domains being monitored.", len(domain_ids)) + LOGGER.info(f"Found {len(domain_ids)} root domains being monitored for {org_code}") domain_ids = str(domain_ids["domainId"].tolist()) # Get Alerts for a specific org based on the list of domain IDs if domain_ids == "[]": - LOGGER.error("Can't match org to any domains...") - failed.append(f"{org_code} - No domains") + LOGGER.warning(f"No domains being monitored by DNSMonitor for {org_code}") + warnings.append(f"{org_code} - No domains being monitored") continue else: alerts_df = get_domain_alerts(token, domain_ids, START_DATE, END_DATE) LOGGER.info("Fetched %s alerts.", len(alerts_df.index)) - # If no alerts, continue - if alerts_df.empty: - LOGGER.error("No alerts for %s", org_code) - failed.append(f"{org_code} - No alerts") - continue + # If no alerts, continue + if alerts_df.empty: + LOGGER.warning(f"No DNSMonitor alerts found for {org_code}") + warnings.append(f"{org_code} - No alerts found") + continue for alert_index, alert_row in alerts_df.iterrows(): # Get subdomain_uid @@ -107,7 +107,7 @@ def run_dnsMonitor(self): root_domain, ) try: - addSubdomain(root_domain, org_uid, True) # api ver. + addSubdomain(root_domain, org_uid, True) # api ver. # addSubdomain(conn, root_domain, org_uid, True) # tsql ver. LOGGER.info( "Success adding %s to subdomain table.", root_domain @@ -164,13 +164,13 @@ def run_dnsMonitor(self): subset=["domain_permutation"], keep="last" ) try: - execute_dnsmonitor_data(dom_perm_df) # api ver. + execute_dnsmonitor_data(dom_perm_df) # api ver. # execute_dnsmonitor_data(dom_perm_df, "domain_permutations") # tsql ver. - # LOGGER.info("Success inserting into domain_permutations - %s", org_code) # tsql ver. + # LOGGER.info("Success inserting into domain_permutations - %s", org_code) except Exception as e: LOGGER.error("Failed inserting into domain_permutations - %s", org_code) LOGGER.error(e) - failed.append(f"{org_code} - Failed inserting into dom_perms") + failed.append(f"{org_code} - Failed inserting into domain_permutations") # Format dataframe and insert into domain_alerts table alerts_df = alerts_df.rename(columns={"date_observed": "date"}) @@ -187,14 +187,28 @@ def run_dnsMonitor(self): ] ] try: - execute_dnsmonitor_alert_data(domain_alerts) # api ver. + execute_dnsmonitor_alert_data(domain_alerts) # api ver. # execute_dnsmonitor_alert_data(domain_alerts, "domain_alerts") # tsql ver. - # LOGGER.info("Success inserting into domain_alerts - %s", org_code) # tsql ver. + # LOGGER.info("Success inserting into domain_alerts - %s", org_code) except Exception as e: LOGGER.error("Failed inserting into domain_alerts - %s", org_code) LOGGER.error(e) - failed.append(f"{org_code} - Failed inserting into dom_alerts") + failed.append(f"{org_code} - Failed inserting into domain_alerts") + + # Output any warnings + if len(warnings) > 0: + LOGGER.warning("Warnings: %s", warnings) # Output any failures if len(failed) > 0: LOGGER.error("Failures: %s", failed) + + # Output summary stats + num_no_domain_monitor = sum('No domains being monitored' in s for s in warnings) + num_no_alerts = sum('No alerts found' in s for s in warnings) + num_success = len(pe_orgs_final) - num_no_domain_monitor - num_no_alerts - len(failed) + num_fail = len(failed) + LOGGER.info(f"{num_no_domain_monitor}/{len(pe_orgs_final)} orgs do not have domains being monitored by DNSMonitor") + LOGGER.info(f"{num_no_alerts}/{len(pe_orgs_final)} orgs have domains being monitored, but didn't have any new alerts") + LOGGER.info(f"{num_success}/{len(pe_orgs_final)} orgs had new DNSMonitor findings and successfully added them to the database") + LOGGER.info(f"{num_fail}/{len(pe_orgs_final)} orgs had a significant failure during the DNSMonitor scan") diff --git a/src/pe_source/dnstwistscript.py b/src/pe_source/dnstwistscript.py index 717cb6a7..b7ae80ca 100644 --- a/src/pe_source/dnstwistscript.py +++ b/src/pe_source/dnstwistscript.py @@ -5,6 +5,7 @@ import json import logging import pathlib +import time import traceback # Third-Party Libraries @@ -22,9 +23,8 @@ org_root_domains, ) -# Setup logging -LOGGER = logging.getLogger(__name__) date = datetime.datetime.now().strftime("%Y-%m-%d") +LOGGER = logging.getLogger(__name__) def checkBlocklist(dom, sub_domain_uid, source_uid, pe_org_uid, perm_list): @@ -150,7 +150,7 @@ def execute_dnstwist(root_domain, test=0): if test == 1: return dnstwist_result finalorglist = dnstwist_result + [] - if root_domain.split(".")[-1] == "gov": + if root_domain.split(".")[-1] == "gov": for dom in dnstwist_result: if ( ("tld-swap" not in dom["fuzzer"]) @@ -161,7 +161,7 @@ def execute_dnstwist(root_domain, test=0): and ("insertion" not in dom["fuzzer"]) and ("transposition" not in dom["fuzzer"]) ): - LOGGER.info("Running again on %s", dom["domain"]) + LOGGER.info("\tRunning again on %s", dom["domain"]) secondlist = dnstwist.run( registered=True, tld=pathtoDict, @@ -201,31 +201,45 @@ def run_dnstwist(orgs_list): continue failures = [] - for org in pe_orgs_final: + # total_dnstwist_time = datetime.timedelta(seconds=0) # exe time testing + # total_blocklist_time = datetime.timedelta(seconds=0) # exe time testing + # total_insertion_time = datetime.timedelta(seconds=0) # exe time testing + for org_idx, org in enumerate(pe_orgs_final): pe_org_uid = org["organizations_uid"] org_name = org["name"] pe_org_id = org["cyhy_db_name"] # Only run on orgs in the org list if pe_org_id in orgs_list or orgs_list == "all" or orgs_list == "DEMO": - LOGGER.info("Running DNSTwist on %s", pe_org_id) + LOGGER.info(f"Running DNSTwist on {pe_org_id} ({org_idx+1} of {len(pe_orgs_final)})") """Collect DNSTwist data from Crossfeed""" try: # Get root domains - root_dict = org_root_domains(PE_conn, pe_org_uid) + # root_dict = org_root_domains(PE_conn, pe_org_uid) # TSQL ver. + root_dict = org_root_domains(pe_org_uid) # API ver. + + # Convert to deduped list of root domains + list_of_roots = [d['root_domain'] for d in root_dict] + list_of_roots = [s.strip() for s in list_of_roots] + list_of_roots = list(set(list_of_roots)) + LOGGER.info(f"{len(list_of_roots)} roots found for {pe_org_id}") + domain_list = [] perm_list = [] - for root in root_dict: - root_domain = root["root_domain"] + for root in list_of_roots: + root_domain = root if root_domain == "Null_Root": continue - LOGGER.info("\tRunning on root domain: %s", root["root_domain"]) - + LOGGER.info("Running DNSTwist on root domain: %s", root) + # t1_1 = time.time() # exe time testing with open( "dnstwist_output.txt", "w" ) as f, contextlib.redirect_stdout(f): finalorglist = execute_dnstwist(root_domain) + # t1_2 = time.time() # exe time testing + LOGGER.info(f"\tFinished running DNSTwist on root domain: {root}") + # total_dnstwist_time += datetime.timedelta(seconds=(t1_2 - t1_1)) # exe time testing # Get subdomain uid sub_domain = root_domain @@ -235,17 +249,26 @@ def run_dnstwist(orgs_list): # TODO: Create custom exceptions. # Issue 265: https://github.com/cisagov/pe-reports/issues/265 # Add and then get it - addSubdomain(sub_domain, pe_org_uid, True) # api ver. + addSubdomain(sub_domain, pe_org_uid, True) # api ver. # addSubdomain(PE_conn, sub_domain, pe_org_uid, True) # tsql ver. sub_domain_uid = getSubdomain(sub_domain) # Check Blocklist - for dom in finalorglist: + LOGGER.info(f"\tRunning blocklist check on the DNSTwist results from root domain: {root}") + # t2_1 = time.time() # exe time testing + for dom_idx, dom in enumerate(finalorglist): + domain_name = dom.get("domain") + print(f"Running blocklist check on {domain_name} ({dom_idx+1}/{len(finalorglist)})") domain_dict, perm_list = checkBlocklist( dom, sub_domain_uid, source_uid, pe_org_uid, perm_list ) if domain_dict is not None: domain_list.append(domain_dict) + # t2_2 = time.time() # exe time testing + LOGGER.info(f"\tFinished running blocklist check on the DNSTwist results from root domain: {root}") + # total_blocklist_time += datetime.timedelta(seconds=(t2_2 - t2_1)) # exe time testing + # print(f"\tCurrent dnstwist time total: {total_dnstwist_time}") # exe time testing + # print(f"\tCurrent blocklist time total: {total_blocklist_time}") # exe time testing except Exception: # TODO: Create custom exceptions. # Issue 265: https://github.com/cisagov/pe-reports/issues/265 @@ -254,6 +277,7 @@ def run_dnstwist(orgs_list): LOGGER.info(traceback.format_exc()) """Insert cleaned data into PE database.""" + # t3_1 = time.time() # exe time testing try: cursor = PE_conn.cursor() try: @@ -291,11 +315,20 @@ def run_dnstwist(orgs_list): LOGGER.info("Failure inserting data into database.") failures.append(org_name) LOGGER.info(traceback.format_exc()) + # t3_2 = time.time() # exe time testing + # total_insertion_time = datetime.timedelta(seconds=(t3_2 - t3_1)) # exe time testing + + # print(f"DNSTwist summary for {pe_org_id}") # exe time testing + # print(f"DNSTwist time: {str(total_dnstwist_time)} (H:M:S)") # exe time testing + # print(f"Blocklist time: {str(total_blocklist_time)} (H:M:S)") # exe time testing + # print(f"DB insert time: {str(total_insertion_time)} (H:M:S)") # exe time testing + + LOGGER.info(f"{len(pe_orgs_final) - len(failures)}/{len(pe_orgs_final)} orgs successfully underwent the DNSTwist scan") + LOGGER.info(f"{len(failures)}/{len(pe_orgs_final)} orgs had a significant failure during the DNSTwist scan") PE_conn.close() if failures != []: - LOGGER.error("These orgs failed:") - LOGGER.error(failures) + LOGGER.error("These orgs failed: ", failures) if __name__ == "__main__": diff --git a/src/pe_source/intelx_identity.py b/src/pe_source/intelx_identity.py index 537837c8..5462f29b 100644 --- a/src/pe_source/intelx_identity.py +++ b/src/pe_source/intelx_identity.py @@ -28,11 +28,11 @@ END_DATE = TODAY.strftime("%Y-%m-%d %H:%M:%S") # Get data source uid SOURCE_UID = get_data_source_uid("IntelX") + section = "intelx" params = get_params(section) api_key = params[0][1] -# Setup logging LOGGER = logging.getLogger(__name__) @@ -69,19 +69,26 @@ def run_intelx(self): else: continue - for pe_org in pe_orgs_final: + success = 0 + failed = 0 + for org_idx, pe_org in enumerate(pe_orgs_final): cyhy_org_id = pe_org["cyhy_db_name"] pe_org_uid = pe_org["organizations_uid"] # Verify the org is in the list of orgs to scan if cyhy_org_id in orgs_list or orgs_list == "all" or orgs_list == "DEMO": + LOGGER.info(f"Running IntelX on {cyhy_org_id} ({org_idx+1} of {len(pe_orgs_final)})") if self.get_credentials(cyhy_org_id, pe_org_uid) == 1: LOGGER.error("Failed to get credentials for %s", cyhy_org_id) + failed += 1 + else: + success +=1 + + LOGGER.info(f"IntelX scan ran successfully for {success}/{len(pe_orgs_final)} organizations") + def get_credentials(self, cyhy_org_id, pe_org_uid): """Get credentials for a provided org.""" - LOGGER.info("Running IntelX on %s", cyhy_org_id) - try: conn = connect() roots_df = get_root_domains(conn, pe_org_uid) @@ -307,4 +314,4 @@ def process_leaks_results(self, leaks_json, org_uid): ] ] - return creds_df, breaches_df + return creds_df, breaches_df \ No newline at end of file diff --git a/src/pe_source/nist_update.py b/src/pe_source/nist_update.py index 5317622f..b50b370a 100644 --- a/src/pe_source/nist_update.py +++ b/src/pe_source/nist_update.py @@ -7,7 +7,12 @@ import time # Third-Party Libraries -from data.pe_db.db_query_source import api_cve_insert, get_cve_and_products +from data.pe_db.db_query_source import ( + query_all_cves, + api_cve_insert, + get_cve_and_products +) + from nested_lookup import nested_lookup import pytz import requests diff --git a/src/pe_source/pe_scripts.py b/src/pe_source/pe_scripts.py index 39499b3f..eb5a98c8 100644 --- a/src/pe_source/pe_scripts.py +++ b/src/pe_source/pe_scripts.py @@ -28,9 +28,11 @@ # Standard Python Libraries import logging import sys +import time from typing import Any, Dict # Third-Party Libraries +from datetime import timedelta import docopt from schema import And, Schema, SchemaError, Use @@ -45,7 +47,6 @@ from .pshtt_wrapper import launch_pe_pshtt from .shodan_wrapper import Get_shodan -# Setup logging LOGGER = logging.getLogger(__name__) @@ -55,27 +56,60 @@ def run_pe_script(source, orgs_list, cybersix_methods, soc_med_included): if orgs_list != "all" and orgs_list != "DEMO": orgs_list = orgs_list.split(",") # If not "all", separate Cybersixgill methods string into a list + sixgill_scan_name = cybersix_methods.title() if cybersix_methods == "all": cybersix_methods = ["alerts", "mentions", "credentials", "topCVEs"] else: cybersix_methods = cybersix_methods.split(",") - LOGGER.info("Running %s on these orgs: %s", source, orgs_list) + # LOGGER.info("Running %s on these orgs: %s", source, orgs_list) if source == "cybersixgill": + if sixgill_scan_name == "Topcves": + sixgill_scan_name = "Top CVEs" + LOGGER.info(f"--- Cybersixgill {sixgill_scan_name} Scan Starting ---") + LOGGER.info(f"Running Cybersixgill {sixgill_scan_name} on these orgs: {orgs_list}") + sixgill_start_time = time.time() cybersix = Cybersixgill(orgs_list, cybersix_methods, soc_med_included) cybersix.run_cybersixgill() + sixgill_end_time = time.time() + LOGGER.info(f"Execution time for Cybersixgill {sixgill_scan_name} scan: {str(timedelta(seconds=(sixgill_end_time - sixgill_start_time)))} (H:M:S)") + LOGGER.info(f"--- Cybersixgill {sixgill_scan_name} Scan Complete ---") elif source == "shodan": + LOGGER.info("--- Shodan Scan Starting ---") + LOGGER.info(f"Running Shodan on these orgs: {orgs_list}") + shodan_start_time = time.time() shodan = Get_shodan(orgs_list) shodan.run_shodan() + shodan_end_time = time.time() + LOGGER.info(f"Execution time for Shodan scan: {str(timedelta(seconds=(shodan_end_time - shodan_start_time)))} (H:M:S)") + LOGGER.info("--- Shodan Scan Complete ---") elif source == "dnsmonitor": + LOGGER.info("--- DNSMonitor Scan Starting ---") + LOGGER.info(f"Running DNSMonitor on these orgs: {orgs_list}") + dnsmonitor_start_time = time.time() dnsMonitor = DNSMonitor(orgs_list) dnsMonitor.run_dnsMonitor() + dnsmonitor_end_time = time.time() + LOGGER.info(f"Execution time for DNSMonitor scan: {str(timedelta(seconds=(dnsmonitor_end_time - dnsmonitor_start_time)))} (H:M:S)") + LOGGER.info("--- DNSMonitor Scan Complete ---") elif source == "dnstwist": + LOGGER.info("--- DNSTwist Scan Starting ---") + LOGGER.info(f"Running DNSTwist on these orgs: {orgs_list}") + dnstwist_start_time = time.time() run_dnstwist(orgs_list) + dnstwist_end_time = time.time() + LOGGER.info(f"Execution time for DNSTwist scan: {str(timedelta(seconds=(dnstwist_end_time - dnstwist_start_time)))} (H:M:S)") + LOGGER.info("--- DNSTwist Scan Complete ---") elif source == "intelx": + LOGGER.info("--- IntelX Scan Starting ---") + LOGGER.info(f"Running IntelX on these orgs: {orgs_list}") + intelx_start_time = time.time() intelx = IntelX(orgs_list) intelx.run_intelx() + intelx_end_time = time.time() + LOGGER.info(f"Execution time for IntelX scan: {str(timedelta(seconds=(intelx_end_time - intelx_start_time)))} (H:M:S)") + LOGGER.info("--- IntelX Scan Complete ---") elif source == "pshtt": launch_pe_pshtt() else: diff --git a/src/pe_source/pshtt_wrapper.py b/src/pe_source/pshtt_wrapper.py index 54f0456b..441f0a71 100644 --- a/src/pe_source/pshtt_wrapper.py +++ b/src/pe_source/pshtt_wrapper.py @@ -6,7 +6,7 @@ import threading # Third-Party Libraries -import data.pshtt.utils as utils +from .data.pshtt import utils import numpy as np from .data.pe_db.db_query_source import api_pshtt_domains_to_run, api_pshtt_insert diff --git a/src/pe_source/shodan_wrapper.py b/src/pe_source/shodan_wrapper.py index 498c3582..d2e441e6 100644 --- a/src/pe_source/shodan_wrapper.py +++ b/src/pe_source/shodan_wrapper.py @@ -1,15 +1,20 @@ """Collect Shodan data.""" # Standard Python Libraries +import logging import threading +import time # Third-Party Libraries +from datetime import timedelta import numpy from .data.pe_db.config import shodan_api_init from .data.pe_db.db_query_source import get_orgs from .data.shodan_db.shodan_search import run_shodan_thread +# Logging +LOGGER = logging.getLogger(__name__) class Get_shodan: """Fetch Shodan data.""" @@ -68,4 +73,4 @@ def run_shodan(self): # Wait until all threads finish to continue for thread in thread_list: - thread.join() + thread.join() \ No newline at end of file