Пример #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
 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");
     }
                      ));
 }
Пример #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);
        }