Added in a lossless LCFP generator
This commit is contained in:
+37
-40
@@ -187,10 +187,25 @@ def menu_prepare_to_enforce():
|
||||
print(ct.colorText(" If metarules need to be created, please make note of them, and remove the row from the csv.", "cyan"))
|
||||
print(ct.colorText(" When complete, save both csv files to the directory 'manuallyapproved' and choose this option to combine these approved hashes with the automatically approved hashes and generate a list of paths to be reviewed", "cyan"))
|
||||
|
||||
if os.path.isfile(f"dataframe_csv\\paths_needing_review_{first_policy}_{second_policy}.csv"):
|
||||
print(ct.colorText(" [✓] This step has been completed","green"))
|
||||
if os.path.exists(f"manuallyapproved\\hashes_needing_approval_{first_policy}_{second_policy}.csv") and os.path.exists(f"manuallyapproved\\automatically_approved_hashes_{first_policy}_{second_policy}.csv"):
|
||||
print(ct.colorText(" [✓] Reviewed hashes have been loaded","green"))
|
||||
else:
|
||||
print(ct.colorText(" [✗] This step has not been completed","red"))
|
||||
print(ct.colorText(" [✗] Reviewed hashes have not been loaded","red"))
|
||||
|
||||
if os.path.exists(f"dataframe_csv\\all_approved_hashes_{first_policy}_{second_policy}.csv"):
|
||||
print(ct.colorText(" [✓] The combined approved hashes list has been generated","green"))
|
||||
else:
|
||||
print(ct.colorText(" [✗] The combined approved hashes list has not been generated","red"))
|
||||
|
||||
if os.path.exists(f"dataframe_csv\\allinfo_{first_policy}_{second_policy}.csv"):
|
||||
print(ct.colorText(" [✓] Longest common filepaths have been generated and appended to hash info","green"))
|
||||
else:
|
||||
print(ct.colorText(" [✗] Longest common filepaths have not been generated","red"))
|
||||
|
||||
if os.path.exists(f"dataframe_csv\\lcf_{first_policy}_{second_policy}.csv"):
|
||||
print(ct.colorText(" [✓] Path review list created","green"))
|
||||
else:
|
||||
print(ct.colorText(" [✗] Path review list has not been created","red"))
|
||||
|
||||
print(ct.colorText(f"4. Manually review the file 'paths_needing_review_{first_policy}_{second_policy}.csv'", "cyan"))
|
||||
print(ct.colorText(" Remove the rows containing path exclusions you do not approve of" , "cyan"))
|
||||
@@ -290,53 +305,35 @@ def menu_prepare_to_enforce():
|
||||
df1 = tryToReadCSV(f"manuallyapproved\\hashes_needing_approval_{first_policy}_{second_policy}.csv")
|
||||
df2 = tryToReadCSV(f"manuallyapproved\\automatically_approved_hashes_{first_policy}_{second_policy}.csv")
|
||||
|
||||
df_all_approved_hashes = pd.concat([df1 , df2], ignore_index=True)
|
||||
df_all_approved_hashes.to_csv(f"dataframe_csv\\all_approved_hashes_{first_policy}_{second_policy}.csv", index=False)
|
||||
ct.style_dataframe_dark(df_all_approved_hashes, f"dataframe_html\\all_approved_hashes_{first_policy}_{second_policy}.html")
|
||||
all_approved_hashes = pd.concat([df1 , df2], ignore_index=True)
|
||||
print(ct.colorText(f"Approved hash lists have been combined","green"))
|
||||
all_approved_hashes.to_csv(f"dataframe_csv\\all_approved_hashes_{first_policy}_{second_policy}.csv", index=False)
|
||||
ct.style_dataframe_dark(all_approved_hashes, f"dataframe_html\\all_approved_hashes_{first_policy}_{second_policy}.html")
|
||||
|
||||
print(ct.colorText(f"Beginning calculating longest common filepaths for path exceptions","green"))
|
||||
grouped_df_view, df_with_groups_appended = utils.pathfunctions.export_groups_for_review(all_approved_hashes, csv_path="filegroups_review.csv")
|
||||
|
||||
df_with_groups_appended.to_csv(f"dataframe_csv\\allinfo_{first_policy}_{second_policy}.csv", index=False)
|
||||
ct.style_dataframe_dark(df_with_groups_appended, f"dataframe_html\\allinfo_{first_policy}_{second_policy}.html")
|
||||
|
||||
forbidden_lcfp = grouped_df_view["longestcfp"].str.contains(r"(?i)(?:\\Users|\\c\$\\Users|inetpub\\wwwroot|windows\\temp)", na=False)
|
||||
grouped_df_view = grouped_df_view[~forbidden_lcfp]
|
||||
print(ct.colorText(f"Removing forbidden filepaths for path exceptions","green"))
|
||||
|
||||
grouped_df_view.to_csv(f"dataframe_csv\\lcf_{first_policy}_{second_policy}.csv", index=False)
|
||||
ct.style_dataframe_dark(grouped_df_view, f"dataframe_html\\lcf_{first_policy}_{second_policy}.html")
|
||||
|
||||
|
||||
df_paths_needing_review, df_path_ineligible = utils.pathfunctions.filepathInitialGroup(pd.read_csv(f"dataframe_csv\\all_approved_hashes_{first_policy}_{second_policy}.csv"))
|
||||
|
||||
df_paths_needing_review.to_csv(f"dataframe_csv\\paths_needing_review_{first_policy}_{second_policy}.csv", index=False)
|
||||
ct.style_dataframe_dark(df_paths_needing_review, f"dataframe_html\\paths_needing_review_{first_policy}_{second_policy}.html")
|
||||
|
||||
df_path_ineligible.to_csv(f"dataframe_csv\\path_ineligible_{first_policy}_{second_policy}.csv", index=False)
|
||||
ct.style_dataframe_dark(df_path_ineligible, f"dataframe_html\\path_ineligible_{first_policy}_{second_policy}.html")
|
||||
|
||||
print(ct.colorText(f"Eligible paths determined","green"))
|
||||
|
||||
else:
|
||||
print(ct.colorText(f"Please manually approve hashes prior to this step","red"))
|
||||
|
||||
|
||||
elif choice == "4":
|
||||
if os.path.exists(f"manuallyapproved\\paths_needing_review_{first_policy}_{second_policy}.csv"):
|
||||
df_approved = tryToReadCSV(f"manuallyapproved\\paths_needing_review_{first_policy}_{second_policy}.csv")
|
||||
df_eligible = tryToReadCSV(f"dataframe_csv\\paths_needing_review_{first_policy}_{second_policy}.csv")
|
||||
df_ineligible = tryToReadCSV(f"dataframe_csv\\path_ineligible_{first_policy}_{second_policy}.csv")
|
||||
|
||||
approved_set = set([tuple(map(tuple, row)) for row in df_approved.values])
|
||||
|
||||
# Identify rows in eligible that are not in approved
|
||||
not_approved_rows = df_eligible[~df_eligible.apply(lambda row: tuple(map(tuple, row)) in approved_set, axis=1)]
|
||||
|
||||
# Append these rows to ineligible
|
||||
df_ineligible= pd.concat([df_ineligible, not_approved_rows], ignore_index=True)
|
||||
|
||||
df_approved.to_csv(f"preflight\\Approved_Path_Exclusions_{first_policy}_{second_policy}.csv")
|
||||
ct.style_dataframe_dark(df_approved, f"preflight\\Approved_Path_Exclusions_{first_policy}_{second_policy}.html")
|
||||
|
||||
#Seperate out what we arent excluding by path into those that will go into the baseline, and those that will b added to the child.
|
||||
df_addtobaseline = df_ineligible[df_ineligible['reputation_status'] == 'KNOWN']
|
||||
df_addtobaseline.to_csv(f"preflight\\Add_to_Baseline_{first_policy}_{second_policy}.csv", index=False)
|
||||
ct.style_dataframe_dark(df_addtobaseline, f"preflight\\Add_to_Baseline_{first_policy}_{second_policy}.html")
|
||||
|
||||
df_addtochildpolicy = df_ineligible[df_ineligible['reputation_status'] == 'UNKNOWN']
|
||||
df_addtochildpolicy.to_csv(f"preflight\\Add_to_Child_Policy_{first_policy}_{second_policy}.csv", index=False)
|
||||
ct.style_dataframe_dark(df_addtochildpolicy, f"preflight\\Add_to_Child_Policy_{first_policy}_{second_policy}.html")
|
||||
|
||||
else:
|
||||
print(ct.colorText(f"Please manually approve suggested paths prior to this step","red"))
|
||||
|
||||
pass
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user