Audit SharePoint : Lexique PowerShell

Businessman looks for the malicious code of a virus

Aujourd’hui je vous propose de passer en revue les commandes PowerShell vous permettant d’auditer la configuration de serveurs SharePoint. Vous pourrez vous servir de ces commandes pour ensuite construire des rapports HTML, dans le but de monitorer votre ferme SharePoint.

Cet ensemble de commande PowerShell peut également vous aider à avoir une image fidèle de la configuration que vous avez mise en place pendant votre mission, permettant d’attester de vos changements lors de vos interventions en clientèle.

Voici plusieures solutions / Tutos pour construire des rapports HTML depuis PowerShell :

Voyons maintenant qu’est ce qu’il est intéressant d’auditer sur un serveur SharePoint.

Informations Système

1.1 Informations Serveur
1.2 Informations OS
1.3 Disques sur le serveur
1.4 Configuration IP
1.5 Rôles déployés
1.6 Fonctionnalités déployées
1.7 Configuration PageFile
1.8 Emplacement MiniDump
1.9 Emplacement DumpFile
1.10 Configuration BackHostNameConnections
1.11 Configuration DisableLoopBackCheck
1.12 Configuration AliasSQL
1.13 Logiciels installés
1.14 Sites IIS
1.15 Pool d’applications
1.16 Etat des services Windows

Informations Sharepoint

2.1 Etat des services SharePoint
2.2 Version des produits SharePoint
2.3 Serveurs de la ferme
2.4 Alternate Access Mapping
2.5 Administrateurs de la ferme
2.6 Compte Managés
2.7 Antivirus Settings

Informations Système

1.1 Informations Serveur

Get-WmiObject -ComputerName . -class Win32_ComputerSystem | Select Name, Domain, Model, @{Expression={$_.TotalPhysicalMemory / 1GB};Label="TotalPhysicalMemory (Go)"}

Sortie :

  • Nom du serveur
  • Domaine dans lequel se trouve le serveur
  • Modèle
  • RAM en Go

Capture.JPG

1.2 Informations OS

Get-WmiObject -ComputerName. -class Win32_OperatingSystem | Select Caption, OSArchitecture, @{Expression={$_.MUILanguages};Label="MUILanguages"}, OSLanguage

Sortie :

  • Nom de l’OS
  • Architecture 64/32 bits
  • Language Culture Name de l’OS
  • Language Culture Code de l’OS

Capture2.JPG

1.3 Disques sur le serveur

Get-WmiObject -class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . | Select DeviceID, @{Expression={$_.FreeSpace / 1GB};Label="FreeSpace (Go)"}, @{Expression={$_.Size / 1GB};Label="Total Size (Go)"}

Sortie :

  • Lettre du disque
  • Espace libre en Go
  • Taille totale en Go

Capture3.JPG

1.4 Configuration IP

Get-NetAdapter

Sortie :

  • Ensemble des paramètres des cartes réseaux présentes

1.5 Rôles déployés

Import-module servermanager | Get-WindowsFeature | Where {$_.Installed -eq $true -and $_.FeatureType -ne "Feature"} |Select Name, Description, Parent | Sort-Object Parent

Sortie :

  • Nom du rôle
  • Description
  • Parent

Capture4.JPG

1.6 Fonctionnalités déployées

Import-module servermanager | Get-WindowsFeature | Where {$_.Installed -eq $true -and $_.FeatureType -eq "Feature"} |Select Name, Description, Parent | Sort-Object Parent

Sortie :

  • Nom de la fonctionnalité
  • Description
  • Parent

Capture5.JPG

1.7 Configuration PageFile

Get-WmiObject Win32_PageFileUsage | Select Name, @{Expression={$_.AllocatedBaseSize / 1GB};Label="AllocatedBaseSize (Go)"}

Sortie :

  • Emplacement du pagefile.sys
  • Taille allouée au fichier

Capture6.JPG

1.8 Emplacement MiniDump

Get-ItemProperty -Path "hklm:system\currentcontrolset\control\crashcontrol" -Name MinidumpDir | Select MinidumpDir, PSPath 

Sortie :

  • Emplacement du Minidump
  • Chemin de la clé de paramétrage dans la base de registre

Capture7.JPG

1.9 Emplacement DumpFile

Get-ItemProperty -Path "hklm:system\currentcontrolset\control\crashcontrol" -Name DumpFile | Select DumpFile, PSPath

Sortie :

  • Emplacement du fichier Memory.DMP
  • Chemin de la clé de paramétrage dans la base de registre

Capture8.JPG

1.10 Configuration BackHostNameConnections

Get-ItemProperty -Path "HKLM:\system\currentcontrolset\control\lsa\MSV1_0" -Name BackConnectionHostNames | Select @{Expression={$_.BackConnectionHostNames};Label="BackConnectionHostNames"}, PSPath

Sortie :

  • Liste de hostname

1.11 Configuration DisableLoopBackCheck

Get-ItemProperty -Path "HKLM:\system\currentcontrolset\control\lsa\MSV1_0" -Name BackConnectionHostNames | Select @{Expression={$_.BackConnectionHostNames};Label="BackConnectionHostNames"}, PSPath

Sortie :

  • Valeur de la clé de registre (0 ou 1)
  • Chemin de la clé de paramétrage dans la base de registre

Capture9.JPG

1.12 Configuration AliasSQL

Get-ItemProperty "HKLM:\software\Microsoft\MSSQLServer\Client\ConnectTo" | Select *

Sortie :

  • Liste des Alias SQL mis en place sur le serveur

Capture10.JPG

1.13 Logiciels installés

Get-ItemProperty -Path "hklm:software\Microsoft\Windows\CurrentVersion\Uninstall\*" | Where-Object{$_.DisplayName -like "*SharePoint*" -or $_.DisplayName -like "*AppFabric*" -or $_.DisplayName -like "*SQL*"} | Select-Object DisplayName, DisplayVersion, InstallDate

Sortie :

  • Nom du Logiciel
  • Version
  • Date d’installation

Capture11.JPG

1.14 Sites IIS

Get-Website | Select Name, Id, State, @{n="Bindings"; e={ ($_.Bindings | Select -expa collection) -join ';'}}, @{n="logFile"; e={ ($_.logFile | Select -expa directory)}}, ApplicationPool, enabledprotocols, PhysicalPath

Sortie :

  • Nom
  • Status des sites IIS
  • Bindings
  • Emplacement du fichier de logs

Capture12.JPG

1.15 Pool d’applications

Get-CimInstance -Namespace root/MicrosoftIISv2 -ClassName IisApplicationPoolSetting -Property Name, AppPoolState, WAMUserName | Select Name, @{Expression={Convert-ApplicationPoolState $_.AppPoolState};Label="State"}, WAMUserName

Sortie :

  • Nom du pool d’application
  • Status du pool
  • Compte de service

Capture13.JPG

1.16 Etat des services Windows

Get-WmiObject -Class Win32_Service -ComputerName . | Select-Object -Property DisplayName, State, Status, StartName | Where {$_.DisplayName -like '*Share*' -or $_.DisplayName -like '*SQL*'}

Sortie :

  • Nom du service windows
  • Status du service

Capture14.JPG

Informations Sharepoint

2.1 Etat des services SharePoint

Get-SPServiceInstance | Select @{Expression={$_.TypeName};Label="Name"}, @{Expression={$_.Status};Label="State"}

Sortie :

  • Nom du service SharePoint
  • Status du service

Capture15.JPG

2.2 Version des produits SharePoint

Get-WmiObject -Class Win32_Product | Where {$_.IdentifyingNumber -Like "*90150000-*"} | Sort -Property Name | Select Name, Version

Sortie :

  • Nom du produit
  • Version du produit

Capture16.JPG

2.3 Serveurs de la ferme

$farm = Get-SPFarm
$farm.Servers | Select Address

Sortie :

  • Liste de nom des serveurs de la ferme SharePoint

Capture17.JPG

2.4 Alternate Access Mapping

 Get-SPAlternateURL | Select IncomingUrl, Zone, PublicUrl

Sortie :

  • Nom du service SharePoint
  • Status du service

Capture18.JPG

2.5 Administrateurs de la ferme

function get-spadministrators()
{
 $ca = [Microsoft.SharePoint.Administration.SPWebService]::AdministrationService.WebApplications | Select -First 1
 $root = $ca.Sites["/"].RootWeb
 $grp = $root.SiteGroups["Farm Administrators"]

 return $grp.Users
}
get-spadministrators | Select UserLogin, Email

Sortie :

  • Login du user
  • Email du user

Capture20.JPG

2.6 Compte Managés

Get-SPManagedAccount | Select Username, AutomaticChange, EnableEmailBeforePasswordChange, CanChangePassword, PasswordLastChanged, PasswordExpiration, MinPasswordLen, ChangeSchedule

Sortie :

  • Nom du user
  • L’utilisateur peut-il changer son mot de passe ?
  • Date de dernier de changement du mot de passe
  • Date d’expiration du mot de passe

Capture21.JPG

2.7 Antivirus Settings

function get-antivirusSettings()
{
 # Get a reference to the Administration
 $adminService = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
 # Set antivirus settings
 $allowdownload = $adminService.AntivirusSettings.AllowDownload
 # Enable Download Scan
 $DownloadScan = $adminService.AntivirusSettings.DownloadScanEnabled
 # Enable upload scan
 $uploadScan = $adminService.AntivirusSettings.UploadScanEnabled
 # Enable Cleaning
 $CleaningEnabled = $adminService.AntivirusSettings.CleaningEnabled
 $obj = new-object psobject -Property @{'AllowDownload' = $allowdownload;'DownloadScanEnabled' = $DownloadScan; 'UploadScanEnabled' = $uploadScan;'CleaningEnabled' = $CleaningEnabled}
 return $obj
}
get-antivirusSettings | Select *

Sortie :

  • Activation du scan à l’upload
  • Activation du scan au download
  • Autorisation du download
  • Activation du nettoyage

Capture22.JPG

2.8 Liste des solutions de ferme déployées

$farm = Get-SPFarm
$farm.Solutions | Select Name, DeploymentState, Status, LastOperationDetails

Sortie :

  • Nom des solutions
  • Scope de déploiement
  • Status de la solution
  • Date de dernière opération

Capture19.JPG