9.7 KiB
Introduction
L'impression sans autorisation peut constituer un risque de sécurité ou une violation de la politique de l'entreprise. Dans les environnements où les travaux d'impression sont facturés, un attaquant interne a une motivation pour contourner le système de comptabilité. De plus, être capable d'imprimer est une condition préalable à la plupart des attaques contre les imprimantes réseau.
Il existe deux approches majeures en ce qui concerne la comptabilité des travaux d'impression : soit laisser l'imprimante le gérer directement, soit utiliser un serveur d'impression intermédiaire. La première approche est spécifique au fournisseur, implique généralement une sorte de "pilote d'imprimante" spécial et n'est pas discutée ici. L'autre approche implique un serveur d'impression séparé - généralement une implémentation logicielle comme CUPS ou LPRng - pour gérer la comptabilité et est assez courante dans les entreprises et les institutions. Le serveur d'impression peut parler LPD, IPP ou d'autres protocoles d'impression et transfère les travaux à l'imprimante réelle. Il est important de noter que l'accès réseau direct à l'imprimante doit être restreint, sinon un attaquant peut facilement contourner le serveur d'impression et ses mécanismes de comptabilité. Cela signifie filtrer l'accès aux ports typiques et atypiques (LPD, IPP, brut, HTTP, SMB, FTP, SNMP).
Il existe essentiellement deux approches pour contourner les systèmes de comptabilité des travaux d'impression : soit usurper l'identité d'un autre utilisateur, soit manipuler le compteur de pages imprimées. Dans ce qui suit, les deux options sont discutées pour les installations LPRng (v3.8.B) et CUPS (v2.1.4) qui sont des systèmes d'impression open-source populaires utilisés dans les environnements académiques et d'entreprise. Une comparaison des fonctionnalités de sécurité des deux systèmes est donnée ci-dessous.
Système d'impression | Protocole | Chiffrement | Authentification | Compteur de pages |
---|---|---|---|---|
LPRng | LPD | SSL/TLS | Kerberos, PGP | matériel |
CUPS | IPP | SSL/TLS | Kerberos, HTTP | logiciel |
Contournement de l'authentification
LPRng et CUPS offrent tous deux un chiffrement de canal basé sur SSL et des schémas d'authentification sécurisés tels que Kerberos, des travaux d'impression signés PGP ou une authentification HTTP basique/digest. Si configurés correctement et si l'attaquant ne peut pas accéder directement à l'imprimante, elle ne pourra pas usurper l'identité d'autres utilisateurs. Cependant, ces fonctionnalités de sécurité sont optionnelles et rarement appliquées dans les serveurs d'impression du monde réel. Au lieu de cela, les noms d'utilisateur donnés en tant que paramètres LPD (LPRng) ou IPP (CUPS) sont enregistrés et comptabilisés - ce qui peut être défini sur des valeurs arbitraires par le côté client. Les raisons de cela sont une considération simple de coûts et avantages dans la plupart des institutions : Kerberos nécessite une configuration spéciale sur chaque client et l'authentification HTTP oblige les utilisateurs à entrer un mot de passe chaque fois qu'ils veulent imprimer quelque chose, tandis que les coûts de quelques impressions non comptabilisées sont supportables.
Vous pouvez vérifier l'authentification appropriée en essayant d'imprimer avec un nom d'utilisateur personnalisé comme ceci :
lp -U nobody test.ps
Manipulation du compteur de pages
Compteurs de pages matériels
Pour une comptabilité correcte, le nombre de pages imprimées doit être déterminé par le système d'impression, ce qui n'est pas une tâche facile. Les auteurs de LPRng supposent que l'imprimante dispose d'un mécanisme de compteur de pages non volatil fiable et insensible aux cycles de mise sous tension/hors tension. Ces compteurs de pages matériels sont pris en charge par la plupart des imprimantes et lus par LPRng en utilisant PJL après chaque travail d'impression. HP a même documenté une fonctionnalité pour écrire dans la variable de compteur de pages en mettant l'imprimante en mode service. De cette façon, le compteur de pages de l'HP LaserJet 1200, HP LaserJet 4200N et HP LaserJet 4250N peut être manipulé dans un travail d'impression. À la fin du document à imprimer et séparé par l'UEL, le compteur doit simplement être réinitialisé à sa valeur d'origine (par exemple, 2342
):
\x1b%-12345X@PJL JOB
This page was printed for free
\x1b%-12345X@PJL EOJ
\x1b%-12345X@PJL JOB
@PJL SET SERVICEMODE=HPBOISEID
@PJL SET PAGES=2342
\x1b%-12345X@PJL EOJ
Un attaquant pourrait définir un nombre négatif de pages imprimées. Notez que la réinitialisation de l'appareil aux paramètres d'usine réinitialise également le compteur de pages à zéro sur certains des appareils testés.
La diminution du compteur de pages peut également être utilisée pour vendre une imprimante à un prix supérieur car elle peut être comparée à l'odomètre lors de l'achat d'une voiture d'occasion. Il convient cependant de souligner que la réinitialisation du compteur de pages n'est pas nécessairement à des fins malveillantes : il s'agit d'un modèle économique bien connu consistant à vendre de l'encre surévaluée pour des dispositifs jet d'encre bon marché et à bloquer les kits de recharge tiers en refusant d'imprimer après un certain nombre de pages - pour gérer de telles pratiques non éthiques, il est tout à fait légitime de réinitialiser le compteur de pages.
Sur les anciennes imprimantes laser HP, la commande pagecount
de PRET peut être utilisée pour définir facilement des compteurs de pages matériels :
./pret.py -q printer pjl
Connection to printer established
Welcome to the pret shell. Type help or ? to list commands.
printer:/> pagecount 10
Old pagecounter: 53214
New pagecounter: 10
Compteurs de pages logiciels
CUPS utilise des compteurs de pages logiciels qui ont été implémentés pour tous les langages de description de pages majeurs. Pour PostScript, une façon facile de contourner la comptabilité est de vérifier si le paramètre système PageCount existe - ce qui renverra faux lorsqu'il est interprété dans CUPS/Ghostscript - avant d'imprimer réellement le document comme indiqué ci-dessous.
currentsystemparams (PageCount) known {
<@\textit{[...] code which is only executed on a printer device [...]}@>
} if
De cette manière, le logiciel de comptabilité utilisé par CUPS rend un document différent de celui de l'imprimante. CUPS ne tient compte que d'une seule page - qui semble être un minimum codé en dur - alors que le vrai travail d'impression peut contenir des centaines de pages. Notez que l'utilisation de la file d'attente/option IPP "brute" est obligatoire, sinon CUPS analyse le code avec un filtre PostScript-to-PostScript (ps2write de Ghostscript) avant qu'il n'atteigne le compteur de pages.
Comment tester cette attaque ?
Enveloppez un document PostScript multi-pages arbitraire dans le code ci-dessus et imprimez-le. Ensuite, allez sur http://printserver:631/jobs?which_jobs=all
et vérifiez le compteur de pages de CUPS pour ce travail d'impression. Notez que vous devez établir une file d'attente brute. C'est-à-dire une file d'attente où le système de filtrage n'est pas impliqué et le travail d'impression va directement à une imprimante. Pour CUPS, cela se fait en définissant le type de contenu sur application/vnd.cups-raw
. Si votre système est déjà configuré pour utiliser le serveur d'impression à tester, utilisez simplement :
lp -o raw test.ps
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
-
Découvrez The PEASS Family, notre collection exclusive de NFTs
-
Obtenez le swag officiel PEASS & HackTricks
-
Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
-
Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.