public CompromiseGraphData PerformAnalyze(PingCastleAnalyzerParameters parameters) { ExportDataFromActiveDirectoryLive export = new ExportDataFromActiveDirectoryLive(parameters.Server, parameters.Port, parameters.Credential); var ObjectReference = export.ExportData(parameters.AdditionalNamesForDelegationAnalysis); storage = export.Storage; CompromiseGraphData data = new CompromiseGraphData(); data.GenerationDate = DateTime.Now; Version version = Assembly.GetExecutingAssembly().GetName().Version; data.EngineVersion = version.ToString(4); #if DEBUG data.EngineVersion += " Beta"; #endif Dictionary <string, string> databaseProperties = storage.GetDatabaseInformation(); data.DomainSid = databaseProperties["DomainSid"]; data.DomainFQDN = databaseProperties["DomainName"]; data.DomainNetBIOS = databaseProperties["DomainNetBIOS"]; data.Data = new List <SingleCompromiseGraphData>(); string domainContext = "DC=" + string.Join(",DC=", data.DomainFQDN.Split('.')); PrepareStopNodes(ObjectReference); PrepareDetailledData(data, ObjectReference); PrepareDependancyGlobalData(data); PrepareAnomalyAnalysisData(data); PrepareRiskData(data); //PrepareObjectiveData(data); return(data); }
public bool AdvancedLiveAnalysisTask() { return(StartTask("Compromission Graph analysis", () => { DisplayAdvancement("Doing the data collection"); ExportDataFromActiveDirectoryLive export = new ExportDataFromActiveDirectoryLive(Server, ADWSPort, Credential); export.ExportData(NodesToInvestigate); DisplayAdvancement("Doing the analysis"); ReportGenerator reporting = new ReportGenerator(export.Storage, MaxDepth, MaxNodes); var data = reporting.GenerateReport(NodesToInvestigate); DisplayAdvancement("Generating the report"); var reportGenerator = new HealthCheckReportCompromiseGraph(data, License); reportGenerator.GenerateReportFile("ad_cg_" + data.DomainFQDN + ".html"); string xml = DataHelper <CompromiseGraphData> .SaveAsXml(data, "ad_cg_" + data.DomainFQDN + ".xml", EncryptReport); if (!String.IsNullOrEmpty(apiKey) && !String.IsNullOrEmpty(apiEndpoint)) { SendViaAPI(new Dictionary <string, string>() { { FileOrDirectory, xml } }); } if (!String.IsNullOrEmpty(sharepointdirectory)) { UploadToWebsite("ad_cg_" + data.DomainFQDN + ".xml", xml); } if (!String.IsNullOrEmpty(sendXmlTo)) { SendEmail(sendXmlTo, new List <string> { data.DomainFQDN }, new List <Attachment> { Attachment.CreateAttachmentFromString(xml, "ad_cg_" + data.DomainFQDN + ".xml") }); } if (!String.IsNullOrEmpty(sendHtmlTo)) { WriteInRed("Html report ignored when xml file used as input"); } if (!String.IsNullOrEmpty(sendAllTo)) { WriteInRed("Html report ignored when xml file used as input"); SendEmail(sendAllTo, new List <string> { data.DomainFQDN }, new List <Attachment> { Attachment.CreateAttachmentFromString(xml, "ad_cg_" + data.DomainFQDN + ".xml") }); } DisplayAdvancement("Done"); } )); }
public void PerformAnalyze(HealthcheckData data, ADDomainInfo domainInfo, ADWebService adws, PingCastleAnalyzerParameters parameters) { ExportDataFromActiveDirectoryLive export = new ExportDataFromActiveDirectoryLive(domainInfo, adws, parameters.Credential); var ObjectReference = export.ExportData(parameters.AdditionalNamesForDelegationAnalysis); storage = export.Storage; data.ControlPaths = new CompromiseGraphData(); data.ControlPaths.Data = new List <SingleCompromiseGraphData>(); data.PrivilegedGroups = new List <HealthCheckGroupData>(); data.AllPrivilegedMembers = new List <HealthCheckGroupMemberData>(); PrepareStopNodes(ObjectReference, domainInfo.DomainSid.Value); PrepareDetailledData(domainInfo, data, ObjectReference); PrepareDependancyGlobalData(data.ControlPaths); PrepareAnomalyAnalysisData(data.ControlPaths); PrepareAllPrivilegedMembers(data); }