예제 #1
0
        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);
        }
예제 #2
0
파일: Bot.cs 프로젝트: woundride/pingcastle
        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));
            }
        }
예제 #3
0
        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);
        }