Skip to the content.

🛡️ SentinelGuard

NuGet Téléchargements Licence

Les vérifications de sécurité de Chaturbate Recorder sont publiées séparément sur NuGet, utilisables dans n’importe quelle application .NET Windows.

dotnet add package SentinelGuard

À qui ça sert

Toute application de bureau qui lance un binaire tiers (yt-dlp, ffmpeg, un outil interne…) ou qui manipule des chemins et des URL fournis par l’utilisateur hérite des mêmes problèmes : un chemin peut sortir du dossier prévu, une URL peut pointer ailleurs que prévu, et un exécutable posé à côté du vôtre peut avoir été remplacé.

SentinelGuard regroupe les contrôles à faire avant de faire confiance.

Ce qu’il vérifie

Classe Ce qu’elle empêche
PathValidator Chemins UNC, chemins étendus (\\?\, \\.\), flux ADS, noms réservés Windows (CON, NUL…), symlinks et points de re-analyse
UrlValidator Schémas autres que HTTPS, domaines hors liste blanche, hôtes bannis, segments de chemin et query string douteux
BinaryVerifier Exécutable altéré : hash SHA-256, signature Authenticode absente ou invalide, certificat signataire inattendu
AclValidator Dossiers inscriptibles par Tout le monde / Utilisateurs authentifiés — là où un binaire peut être remplacé juste avant son exécution
WorkingDirectoryValidator Exécution depuis un partage réseau, un dossier temporaire, la corbeille ou un dossier compressé NTFS
CertificateValidator Interception TLS : pinning explicite de certificat et validation du SAN
GuardedProcessRunner Un binaire vérifié qui dérape une fois lancé : processus figé (watchdog d’inactivité) et processus enfants orphelins (arrêt de l’arbre complet)
LogFileRotator Un fichier de log qui grossit sans limite pendant une capture longue, et des logs conservés indéfiniment

Vérifier, puis surveiller

Contrôler l’empreinte d’un exécutable ne couvre que l’instant avant de le lancer. Deux pannes restent possibles ensuite, et aucune ne lève d’exception : le processus se fige (vivant, muet, l’attendre revient à attendre indéfiniment), ou il laisse des enfants derrière lui (tuer celui qu’on a lancé ne les arrête pas).

using var runner = new GuardedProcessRunner();
runner.OutputLineReceived += ligne => Console.WriteLine(ligne);

// Aucune sortie pendant 2 minutes = figé : tué, rapporté en Failed.
runner.Start(cheminOutil, new[] { "--input", @"C:\un chemin\fichier.mkv" },
    TimeSpan.FromMinutes(2), out var motif);

runner.Stop();   // tue tout l'arbre, rapporte Stopped — pas Failed

L’état final distingue ce qu’un simple code de retour ne dit pas : Completed (sorti avec 0), Failed (code non nul, ou tué par le watchdog) et Stopped (arrêt demandé). Les arguments se passent un par élément : un chemin contenant des espaces n’a pas besoin d’être échappé et ne peut pas être coupé en deux.

Comment ça s’utilise

Des fonctions pures, sans effet de bord. Chaque vérification retourne un booléen, avec une surcharge optionnelle donnant le motif exact du refus :

using SentinelGuard;

if (!PathValidator.IsValidPath(cheminUtilisateur, mustExist: true, out var motif))
{
    Console.WriteLine($"Chemin refusé : {motif}");
    return;
}

if (!BinaryVerifier.VerifyTrustedBinary(cheminOutil, hashAttendu, out var motifBin))
{
    Console.WriteLine($"Binaire refusé : {motifBin}");
    return;
}

Rien n’est journalisé, rien n’est levé dans votre dos : vous décidez quoi faire du motif — l’écrire dans vos logs, l’afficher, ou l’ignorer.

Portée

Cible net8.0-windows et net10.0-windows. Windows uniquement, en connaissance de cause : les ACL NTFS, Authenticode et les magasins de certificats Windows n’ont pas d’équivalent multiplateforme.

Ce que ce n’est pas : un bac à sable ni une frontière de sécurité. SentinelGuard réduit la surface d’attaque des entrées non fiables dans une application de bureau ; il ne confine pas un processus hostile. À considérer comme une défense en profondeur, en complément des protections du système — pas à leur place.

Liens

← Accueil · Fonctionnalités · Roadmap