Skip to content

Commit c99d964

Browse files
committed
Merge branch 'master' of [email protected]:vletoux/pingcastle.git
2 parents 4138fc4 + 61826b8 commit c99d964

File tree

1 file changed

+41
-24
lines changed

1 file changed

+41
-24
lines changed

Healthcheck/HealthcheckAnalyzer.cs

Lines changed: 41 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ namespace PingCastle.Healthcheck
3636
{
3737
public class HealthcheckAnalyzer : IPingCastleAnalyzer<HealthcheckData>
3838
{
39+
private const string LatinUpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
40+
private const string LatinLowerCase = "abcdefghijklmnopqrstuvwxyz";
41+
3942
public static bool SkipNullSession { get; set; }
4043
HealthcheckData healthcheckData;
4144

@@ -2004,7 +2007,7 @@ void ThreadGPOAnalysis(ADWebService adws, string directoryFullName, GPO GPO, ADD
20042007
path = directoryFullName + @"\Machine\Preferences\Registry\Registry.xml";
20052008
if (adws.FileConnection.FileExists(path))
20062009
{
2007-
ExtractGPOSettingsFromRegistryXml(path, GPO);
2010+
ExtractNetSessionHardeningFromRegistryXml(path, GPO);
20082011
}
20092012

20102013
}
@@ -2072,36 +2075,50 @@ private void ExtractLoginPassword(IADConnection adws, string path, GPO GPO, stri
20722075
}
20732076
}
20742077

2075-
private void ExtractGPOSettingsFromRegistryXml(string path, GPO GPO)
2076-
{
2077-
XmlDocument doc = new XmlDocument();
2078+
private void ExtractNetSessionHardeningFromRegistryXml(string path, GPO gpo) {
2079+
const string valueName = "SrvsvcSessionInfo";
2080+
const string valuePath = @"SYSTEM\CurrentControlSet\Services\LanmanServer\DefaultSecurity";
2081+
2082+
var xPath = string.Format("//Registry/Properties[translate(@name, \"{0}\", \"{1}\")=\"{2}\"][translate(@key, \"{0}\", \"{1}\")=\"{3}\"]",
2083+
LatinUpperCase,
2084+
LatinLowerCase,
2085+
valueName.ToLowerInvariant(),
2086+
valuePath.ToLowerInvariant());
2087+
2088+
var doc = new XmlDocument();
20782089
doc.Load(path);
2079-
XmlNodeList nodeList = doc.SelectNodes(@"//Registry/Properties[@name=""SrvsvcSessionInfo""][@key=""SYSTEM\CurrentControlSet\Services\LanmanServer\DefaultSecurity""]");
2080-
if (nodeList.Count > 0)
2090+
2091+
var nodeList = doc.SelectNodes(xPath);
2092+
if (nodeList.Count == 0) {
2093+
return;
2094+
}
2095+
2096+
GPPSecurityPolicy secPol = null;
2097+
foreach (var policy in healthcheckData.GPOLsaPolicy)
20812098
{
2082-
GPPSecurityPolicy SecurityPolicy = null;
2083-
foreach (GPPSecurityPolicy policy in healthcheckData.GPOLsaPolicy)
2099+
if (policy.GPOId == gpo.InternalName)
20842100
{
2085-
if (policy.GPOId == GPO.InternalName)
2086-
{
2087-
SecurityPolicy = policy;
2088-
break;
2089-
}
2101+
secPol = policy;
2102+
break;
20902103
}
2091-
if (SecurityPolicy == null)
2092-
{
2093-
SecurityPolicy = new GPPSecurityPolicy();
2094-
SecurityPolicy.GPOName = GPO.DisplayName;
2095-
SecurityPolicy.GPOId = GPO.InternalName;
2104+
}
20962105

2097-
lock (healthcheckData.GPOLsaPolicy)
2098-
{
2099-
healthcheckData.GPOLsaPolicy.Add(SecurityPolicy);
2100-
}
2101-
SecurityPolicy.Properties = new List<GPPSecurityPolicyProperty>();
2106+
if (secPol == null)
2107+
{
2108+
secPol = new GPPSecurityPolicy {
2109+
GPOName = gpo.DisplayName,
2110+
GPOId = gpo.InternalName
2111+
};
2112+
2113+
lock (healthcheckData.GPOLsaPolicy)
2114+
{
2115+
healthcheckData.GPOLsaPolicy.Add(secPol);
21022116
}
2103-
SecurityPolicy.Properties.Add(new GPPSecurityPolicyProperty("SrvsvcSessionInfo", 1));
2117+
2118+
secPol.Properties = new List<GPPSecurityPolicyProperty>();
21042119
}
2120+
2121+
secPol.Properties.Add(new GPPSecurityPolicyProperty(valueName, 1));
21052122
}
21062123

21072124
private void ExtractRegistryPolInfo(IADConnection adws, ADDomainInfo domainInfo, string directoryFullName, GPO GPO)

0 commit comments

Comments
 (0)