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); }
private BotInputOutput RunHealthCheck(BotInputOutput input) { try { var analyze = new HealthcheckAnalyzer(); var parameters = new PingCastleAnalyzerParameters(); parameters.Server = GetItem(input, "Server"); var login = GetItem(input, "Login"); var password = GetItem(input, "Password"); if (!string.IsNullOrEmpty(login) && !string.IsNullOrEmpty(password)) { parameters.Credential = new System.Net.NetworkCredential(login, password); } var port = GetItem(input, "Port"); if (!string.IsNullOrEmpty(port)) { parameters.Port = int.Parse(port); } var healthcheck = analyze.PerformAnalyze(parameters); var o = new BotInputOutput(); o.Data = new List <BotData>(); AddData(o, "Status", "OK"); AddData(o, "Target", parameters.Server); int riskId = 0; foreach (var risk in healthcheck.RiskRules) { riskId++; var rule = RuleSet <HealthcheckData> .GetRuleFromID(risk.RiskId); AddData(o, "Rationale_" + riskId, risk.Rationale); AddData(o, "Title_" + riskId, rule.Title); AddData(o, "Solution_" + riskId, rule.Solution); AddData(o, "Points_" + riskId, risk.Points.ToString()); AddData(o, "Documentation_" + riskId, rule.Documentation); AddData(o, "TechnicalExplanation_" + riskId, rule.TechnicalExplanation); foreach (var d in rule.Details) { AddData(o, "Detail_" + riskId, d); } } healthcheck.SetExportLevel(PingCastleReportDataExportLevel.Full); var xmlreport = DataHelper <HealthcheckData> .SaveAsXml(healthcheck, null, false); AddData(o, "Report", xmlreport); return(o); } catch (Exception ex) { Console.WriteLine("Exception:" + ex.Message); Console.WriteLine("StackTrace:" + ex.StackTrace); return(ExceptionOutput("Exception during the healthcheck " + ex.Message, ex.StackTrace)); } }
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); }