Virtualization, technology, and random rantings with a focus on Citrix and VMware.

Author: Kris Davis Page 7 of 12

Firmware Upgrade Complete! Responder, Where’d You Go?!

Recently we had upgraded firmware on a Citrix ADC from 13.0-83.27 to 13.0-85.15. This was to try and correct an issue with the HTML interface not updating the custom settings on the Login Schemas for nFactor configuration. It would create the custom XML file for use, but it wouldn’t reflect any changes to it. I checked the permissions on the XML file and they would show root had read / write. You could still copy the XML file down via tools like WinSCP, make the edit, and copy back to the ADC.

Below you can see what happened. You would navigate to AppExpert > Responder and you would see the proper number of policies showing.

After you click on the the # Responder Policies, you see below.

It shows that there are no policies there. You can click on “Statistics” and you see this below.

It appears that it reset the counters as well. You can putty into the ADC and do a “show run” and you see that they are still there.

You can see that the policies are there. They do appear to work, but they just don’t show on the HTML GUI.

So a downgrade of version will be in order to see if that resolves the issue and Citrix is still looking at the issue to find a resolution.

UPDATE: Looks like a firmware revision reversion took care of the display issue with the showing of Responder policies.

How To Create The Wow nFactor!

nFactor Flow

This will end up being my first foray into a multi-part series. I will post the links to the other relevant walk throughs as I complete them.

Part 2 of the configuration: https://xenapplepie.com/2022/03/22/how-to-create-the-wow-nfactor-part-2/

This configuration covers setting up EULA as a first factor in an nFactor flow to do one side of an MFA configuration. This will setup a group extraction that looks for an assigned Universal group that is designated to trigger directing traffic to an MFA provider. The reason for using a Universal group would be in an instance where you have a forest with multiple subdomains that have a two-way transitive trust. This allows you to manage group membership from one domain as the Universal group will be replicated to all the domain controllers. This example is to check membership of the Universal group and perform cascading LDAP for the users that are NOT members of that Universal group.

So I was trying to move to advanced authentication in a test environment. While I was doing that, I thought to myself that since my end goal with that test, would be to prep to move to MFA. That led to me thinking how I would want to implement that. Then…… I ran into a very interesting thing when you move from using basic authentication to an authentication profile with AAA-TM, that the EULA option goes bye bye. There isn’t even an option to select. So I went looking how to resolve that. One option was to follow a guide that I found to edit some xml files, but that meant that I would have to manually copy these to keep them in sync between the Citrix ADCs. I didn’t like that idea but did see the option to use EULA as a first factor in nFactor. Hmm… I was already thinking in that mode to setup nFactor since it would be needed to go down the MFA road. So that is the decision I decided to work on and get testing. I also found some interesting tidbits that I’ll point out in the configuration.

Update: Changed LDAPS policy settings to fix “Anonymous” issue.

Update: Added link to article to create custom XML file to change ${http.req.user.name} to ${AAA.USER.NAME}

So here we go!

You will need to have either Advanced or Premium license to have access to this feature. You will also need to have configured an Authentication Virtual Server which I will link soon.

Login to you Citrix ADC.

Navigate to Security > AAA – Application Traffic > nFactor Visualizer > nFactor Flows.

Select Add.

Select the “+” in the center of the square.

Select “Create Factor.”

Enter “Factor Name.”

Click “Create.”

Select “Add Schema.”

Enter “Name” for schema.

In the “Authentication Schema” box, select the “Edit” pencil.

Click on the “LoginSchema.” This will bring up a list to choose from.

Scroll down and select “Eula.xml.”

Click the “Edit” button if you want to edit the EULA message.

After you change the EULA message below and click “Save,” click the “Select” button. This is VERY important or it won’t select it.

After you have configured the message, click “Save.”

Click “Create” button.

Click “OK.”

Click on “Add Policy.”

Click the “Add” button.

Name the policy and select “Action” as “NO_AUTHN.”

For the “Expression,” enter “HHTP.REQ.URL.CONTAINS(“/nf/auth/doAuthentication.do”)

Click “OK.”

Click “+” sign beside “NO_Authn_Pol” (whatever you name the Authentication Policy).

Select “Create Factor.” This factor will do the group extraction to test group access.

Name “Factor Name.” (Grp_Ext_Test in this example)

Select “Add Schema.”

Select “Only_User_Name.” This will have the user enter their user name to be evaluated.

Click “OK.”

Click “Add Policy.”

Click “Add.”

Enter “Name” for policy (test-ldap-grpexpt-pol in this example).

Select “Action Type” as “LDAP.”

For the “Expression” enter “true.”

Click “Add” on “Action.”

Select the root of the forest (domain if you only have 1 domain) for the “Server Name.” (The DC that you are trying to access will need to have the Global Catalog available for this to work correctly)

For the “Port,” choose either 3268 for unsecure LDAP or 3269 for secure LDAP (This will require that you upload the root certificate for the organization to utilize).

Make sure the UNCHECK the box for Authentication. This is just going to do a lookup if the user is part of the MFA group.

Enter your “Base DN” as where the users will be or the root of the forest / domain.

Enter “Administrator Bind DN” which is the account that will authenticate to the domain.

Enter and confirm “Administrator Password.”

Click “Test Network connectivity” to make sure that it is working correctly.

Complete “Server Logon Name Attribute” as “sAMAccountName.” The samaccountnames need to be unique in the forest or you will have issues with this global catalog lookup.

For “Group Attribute” select “memberOf.”

For “Sub Attribute Name” select “cn.”

Click the “+” sign beside “test-ldap-grpext-pol.”

Select “Create decision block” and enter “Decision block Name.” (Grp_Eval_Test in this example)

Click “Create.”

Click “Add Policy.”

Click “Add.” (NonMFA_Test in this example)

Select “Action Type” as “N0_AUTHN.”

Select “Action” as “NO_AUTHN.”

In the “Expression” enter “AAA.USER.IS_MEMBEROF(“UniversalGroup”).NOT.” (UniversalGroup is the group name of the MFA testing group)

Click on the “+” sign beside “NonMFA_Test.”

Select “Create Factor.”

Enter “Factor Name.” (LDAPS_Auth_Test in this example)

Click “Create.”

For the “Authentication Schema” click the pencil icon.

This allows you to take what was entered just after click on “Continue” for the EULA and populating that in the User Name / Password dialogue to prevent users from having to enter it twice.

Under the “Login Schema Files” select “PrefilUserFromExpr.xml. (Note that User Name contains $(http.req.user.name).

Click “Select.”

Click “Create.”

This error will pop up and you have to click “OK.” It will still work. This is the link to the remediation of this: https://xenapplepie.com/2022/04/06/change-that-deprecated-http-req-user/

Click “OK.”

Click “Add Policy.”

Enter “Name.” (test-auth-pol in this example)

Under “Action Type” select “LDAP.”

For “Action” select existing LDAP/LDAPS server.

For “Expression” enter “true.”

You can click the “+” sign on the bottom of the box to add additional LDAP/LDAPS policies. This is what you would normally see under the Basic Authentication on the Citrix Gateway.

Once you have completed this, you will need to go the appropriate Citrix Gateway vServer and change the authentication. Next step to adding nFactor and using Advanced Authentication: https://xenapplepie.com/2022/03/22/how-to-create-the-wow-nfactor-part-2/

EULA Evolves, Form Of nFactor!

Preview of what is coming this weekend…..

nFactor Overview

How about a way to convert basic authentication on Citrix Gateway on-prem to advanced authentication with nFactor.

1912 LTSR CU5 Released!

It has been released! Ghostbusters summoned to get rid of those ghost sessions!

https://www.citrix.com/downloads/citrix-virtual-apps-and-desktops/product-software/citrix-virtual-apps-and-desktops-1912ltsr-cu5.html

Under My SSL Thumbprint

Wouldn’t you know it!? A vCenter certificate got changed out and now your hypervisor connector is showing it no worky. Come to find out you missed the email memo that the certificate was getting changed. Or you might’ve been busy and didn’t think too much of it. Well, now you have to get it fixed! What if there was a way to get that information quickly and easily so that you just had to do some copy / paste magic to resolve it? Well…. There is! This handy dandy little script will get those pesky thumbprints and kick them out as a csv so you can use them to update your connector in the XenDesktop database.

# A script to check SSL thumbprints on your Citrix hypervisor connections. This will get all of the thumbprints of your connectors and will get the SSL thumbprints of your vCenters if you happen to have more than one.
# This is for running on in-premise Citrix farm (7.x) on a Delivery Controller with 10.1.0 VMware.PowerCLI module and the Citrix SDK installed with VMware ESXi 7.0U1 or later. This also is ran in ISE. Get-SSLThumbprint function is from https://gist.github.com/lamw/988e4599c0f88d9fc25c9f2af8b72c92
# with the return $SSL_THUMBPRINT -replace '(..(?!$))','$1' changed from ending in '$1:' The instructions for changing the SSL thumbprint can be found at https://support.citrix.com/article/CTX224551. 

asnp Citrix*

Function Get-SSLThumbprint {
    param(
    [Parameter(
        Position=0,
        Mandatory=$true,
        ValueFromPipeline=$true,
        ValueFromPipelineByPropertyName=$true)
    ]
    [Alias('FullName')]
    [String]$URL
    )

add-type @"
        using System.Net;
        using System.Security.Cryptography.X509Certificates;
            public class IDontCarePolicy : ICertificatePolicy {
            public IDontCarePolicy() {}
            public bool CheckValidationResult(
                ServicePoint sPoint, X509Certificate cert,
                WebRequest wRequest, int certProb) {
                return true;
            }
        }
"@
    [System.Net.ServicePointManager]::CertificatePolicy = new-object IDontCarePolicy

    # Need to connect using simple GET operation for this to work
    Invoke-RestMethod -Uri $URL -Method Get | Out-Null

    $ENDPOINT_REQUEST = [System.Net.Webrequest]::Create("$URL")
    $SSL_THUMBPRINT = $ENDPOINT_REQUEST.ServicePoint.Certificate.GetCertHashString()

    return $SSL_THUMBPRINT -replace '(..(?!$))','$1'
}


$xdConnections = Get-ChildItem XDHyp:\Connections | Select HypervisorConnectionName, HypervisorAddress, SslThumbprints

$xdThumbprints = @()

foreach($xdc in $xdConnections) 
    {
    $line = ""| Select HypervisorConnectionName, HypervisorAddress, SslThumbprints, vCenterThumbprints, SameThumbprint
              
    $line.HypervisorConnectionName = ($xdc).HypervisorConnectionName
    $line.HypervisorAddress        = ($xdc).HypervisorAddress | Out-String
    $line.SslThumbprints           = ($xdc).SslThumbprints | Out-String
    $line.vCenterThumbprints       = Get-SSLThumbprint (($xdc).HypervisorAddress | Out-String)
    $line.SameThumbprint           = ($line.SslThumbprints -match $line.vCenterThumbprints)

    $xdThumbprints += $line
        
    }

$xdThumbprints | Export-Csv c:\scripts\logs\sslthumbprints.csv

So This Happened!

Absolutely thrilled and amazed that I have the opportunity to join some of the best professionals out there in the Citrix world by being accepted into the ranks of Citrix Technology Advocates! Excited for what is to come with this! Make sure to welcome and congratulate all the new members and the returning members! Here is the link to check them all out!

Citrix Technology Advocate Awardees – Citrix

~~ Kris Davis

Where In The World Is Carmen Sandiego?!

You ever get an email from a user that just has their name in it and my VDI isn’t working? You ever go to Citrix Studio and look for the user and sort to find them? Well…. How about a better, faster, more streamlined way!? (Might be some powershell involved)

Look no further! Below is a fast and easy way to find that machine that the user just may have happened to forget to include in said email!

Got to make sure you have have the Citrix Studio Powershell modules in there and load them.

If you happen to do the above, you get this:

Gets you the result with names and machine names.

And so you can do that sweet, sweet copy / paste, code snippet below.

asnp Citrix*

$adminAddress = "deliverycontroller.fqdn:80"

Get-Brokermachine -AdminAddress $adminAddress -MaxRecordCount 1000 | Where AssociatedUserNames -like "*partofusername*" | Where SessionSupport -eq "SingleSession" | Select AssociatedUserNames, HostedMachineName, RegistrationState, OSType

Hope that is of some help to you! I typically user the last name for the part of the user name to search the assignments.

Merry Christmas to All!

That is all. Just a Merry Christmas!

Responder To The Log4

Make sure and keep up to date from Citrix with the CVE-2021-44228. https://support.citrix.com/article/CTX335705

This link has the mitigations for the WAF and a Responder policy. https://www.citrix.com/blogs/2021/12/13/guidance-for-reducing-apache-log4j-security-vulnerability-risk-with-citrix-waf/

Got Some Class

Went and got me some class! Wonderful instructor Matthew Jones over at Layer8!

Getting after it!

Page 7 of 12

Powered by WordPress & Theme by Anders Norén