nochmal Frage zum Raspberry

S

Stefan

Guest
Hallo,

ich hatte vor kurzem nach der Zuverlässigkeit eines Raspberrys gefragt.

Ich hab da noch eine Frage, weitere kommen vermutlich noch:

Wie kann ich einen Raspberry eindeutig identifizieren?

Die Software befindet sich ja inclusive Betriebssystem auf einer
SD-Karte. Die kann ich herausnehmen, kopieren und in einen anderen
Raspberry stecken.

Das darf aber auf keinen Fall funktionieren, d.h. ich muss den Raspi fĂźr
den ich eine SD-Karte erstellt habe eindeutig identifizieren und das
Programm sofort beenden, wenn da etwas faul ist.

Eine MÜglichkeit wäre MAC-Adresse abzufragen, diese zu verschlßsseln und
auf dem Raspberry zu speichern.

Die MAC-Adresse kann man aber wohl manipulieren.

Welche MĂśglichkeit gibt es noch? Gibt es die MĂśglichkeit, die
Seriennummer der CPU oder eines anderen Bausteins auszulesen?

Gruß

Stefan
 
On 04.02.2019 08:57, Stefan wrote:

Welche MĂśglichkeit gibt es noch? Gibt es die MĂśglichkeit, die
Seriennummer der CPU oder eines anderen Bausteins auszulesen?

Google ist Dir ein Begriff?

z.B.
cat /proc/cpuinfo | grep Serial | cut -d' ' -f2
 
On 2/4/19 8:57 AM, Stefan wrote:
Hallo,

ich hatte vor kurzem nach der Zuverlässigkeit eines Raspberrys gefragt.

Ich hab da noch eine Frage, weitere kommen vermutlich noch:

Wie kann ich einen Raspberry eindeutig identifizieren?

Die Software befindet sich ja inclusive Betriebssystem auf einer
SD-Karte. Die kann ich herausnehmen, kopieren und in einen anderen
Raspberry stecken.

Das darf aber auf keinen Fall funktionieren, d.h. ich muss den Raspi fĂźr
den ich eine SD-Karte erstellt habe eindeutig identifizieren und das
Programm sofort beenden, wenn da etwas faul ist.

Eine MÜglichkeit wäre MAC-Adresse abzufragen, diese zu verschlßsseln und
auf dem Raspberry zu speichern.

Die MAC-Adresse kann man aber wohl manipulieren.

Welche MĂśglichkeit gibt es noch? Gibt es die MĂśglichkeit, die
Seriennummer der CPU oder eines anderen Bausteins auszulesen?

Ja, geht.

Die Ausgabe von 'cat /proc/cpuinfo' enthält eine Zeile die mit 'Serial:'
beginnt. Die Hexzahl danach ist fĂźr jeden Pi eindeutig und wird auch
benutzt um die Keys fĂźr MPEG2 und VC1 zu personalisieren.

Sollte also kein Problem sein.

Gerrit
 
Am 04.02.2019 um 09:10 schrieb Gerrit Heitsch:
On 2/4/19 8:57 AM, Stefan wrote:
Hallo,

ich hatte vor kurzem nach der Zuverlässigkeit eines Raspberrys gefragt.

Ich hab da noch eine Frage, weitere kommen vermutlich noch:

Wie kann ich einen Raspberry eindeutig identifizieren?

Die Software befindet sich ja inclusive Betriebssystem auf einer
SD-Karte. Die kann ich herausnehmen, kopieren und in einen anderen
Raspberry stecken.

Das darf aber auf keinen Fall funktionieren, d.h. ich muss den Raspi
fĂźr den ich eine SD-Karte erstellt habe eindeutig identifizieren und
das Programm sofort beenden, wenn da etwas faul ist.

Eine MÜglichkeit wäre MAC-Adresse abzufragen, diese zu verschlßsseln
und auf dem Raspberry zu speichern.

Die MAC-Adresse kann man aber wohl manipulieren.

Welche MĂśglichkeit gibt es noch? Gibt es die MĂśglichkeit, die
Seriennummer der CPU oder eines anderen Bausteins auszulesen?

Ja, geht.

Die Ausgabe von 'cat /proc/cpuinfo' enthält eine Zeile die mit 'Serial:'
beginnt. Die Hexzahl danach ist fĂźr jeden Pi eindeutig und wird auch
benutzt um die Keys fĂźr MPEG2 und VC1 zu personalisieren.

Sollte also kein Problem sein.

 Gerrit

ok, danke fĂźr die Info. Danke auch an Thorsten.

Gruß

Stefan
 
On 2/4/19 8:57 AM, Stefan wrote:
Die Software befindet sich ja inclusive Betriebssystem auf einer
SD-Karte. Die kann ich herausnehmen, kopieren und in einen anderen
Raspberry stecken.

Wen willst du aufhalten?

Den versierten Linux-Programmierer oder den "normalen User"?

Welche MĂśglichkeit gibt es noch? Gibt es die MĂśglichkeit, die
Seriennummer der CPU oder eines anderen Bausteins auszulesen?

Ja.

Gibt es eine MĂśglichkeit jemanden mit fundierten Linux-Kenntnissen daran
zu hindern diese zu manipulieren?

Nein.

Gruß

Manuel
 
Am 04.02.19 um 17:15 schrieb Manuel Reimer:
On 2/4/19 8:57 AM, Stefan wrote:
Welche MĂśglichkeit gibt es noch? Gibt es die MĂśglichkeit, die
Seriennummer der CPU oder eines anderen Bausteins auszulesen?

Ja.

Gibt es eine MĂśglichkeit jemanden mit fundierten Linux-Kenntnissen daran
zu hindern diese zu manipulieren?

Nein.

Das stimmt so nicht wirklich. Die Seriennummer wird vom /Hauptprozessor/
des Pi, der VCU verwaltet. Die Firmware dafĂźr ist aber /nicht
Open-Source/. Der ARM Core ist eigentlich nur ein Coprozessor,
gleichwohl er mittlerweile mehr Rechenleistung hat.

NatĂźrlich kĂśnnte man den Linux-Kernel so manipulieren, dass er
irgendetwas in /proc/cpuinfo schreibt. Spätestens aber, wenn man die VC
Kommandos, die diesem als Grundlage dienen, direkt aufruft, wird es eng.
vcgencmd otp_dump spuckt die Serial direkt aus.

Da mßsste man schon die Firmware binär so manipulieren, dass sie statt
der Seriennummer eine andere Konstante liefert. Das ist selbst fĂźr einen
erfahrenen Linuxer kaum zu schaffen. Ohne Internas Ăźber die (nicht
Ăśffentlich dokumentierte) VCU zu kennen, ist das kaum mĂśglich.

Nur wenn man den Quellcode und die passende Entwicklungsumgebung hat,
geht das mit vertretbarem Aufwand. Technisch ist das sogar kein Problem
und wurde zu Testzwecken längst durchgefßhrt, aber eben unter
Verschwiegenheitserklärung.


Marcel
 
On 2/4/19 7:54 PM, Marcel Mueller wrote:
Am 04.02.19 um 17:15 schrieb Manuel Reimer:
On 2/4/19 8:57 AM, Stefan wrote:
Welche MĂśglichkeit gibt es noch? Gibt es die MĂśglichkeit, die
Seriennummer der CPU oder eines anderen Bausteins auszulesen?

Ja.

Gibt es eine MĂśglichkeit jemanden mit fundierten Linux-Kenntnissen
daran zu hindern diese zu manipulieren?

Nein.

Das stimmt so nicht wirklich. Die Seriennummer wird vom /Hauptprozessor/
des Pi, der VCU verwaltet. Die Firmware dafĂźr ist aber /nicht
Open-Source/. Der ARM Core ist eigentlich nur ein Coprozessor,
gleichwohl er mittlerweile mehr Rechenleistung hat.

NatĂźrlich kĂśnnte man den Linux-Kernel so manipulieren, dass er
irgendetwas in /proc/cpuinfo schreibt. Spätestens aber, wenn man die VC
Kommandos, die diesem als Grundlage dienen, direkt aufruft, wird es eng.
vcgencmd otp_dump spuckt die Serial direkt aus.

Ja... und was ist wenn ich ein eigenes vcgencmd davorschalte welches das
echte aufruft und alles ausser der Ser# sauber durchreicht und die
passend umschreibt?

Ist ja nicht so, daß das eine neue Idee wäre.

Gerrit
 
Am 04.02.2019 um 20:06 schrieb Gerrit Heitsch:
On 2/4/19 7:54 PM, Marcel Mueller wrote:
Am 04.02.19 um 17:15 schrieb Manuel Reimer:
On 2/4/19 8:57 AM, Stefan wrote:
Welche MĂśglichkeit gibt es noch? Gibt es die MĂśglichkeit, die
Seriennummer der CPU oder eines anderen Bausteins auszulesen?

Ja.

Gibt es eine MĂśglichkeit jemanden mit fundierten Linux-Kenntnissen
daran zu hindern diese zu manipulieren?

Nein.

Das stimmt so nicht wirklich. Die Seriennummer wird vom
/Hauptprozessor/ des Pi, der VCU verwaltet. Die Firmware dafĂźr ist
aber /nicht Open-Source/. Der ARM Core ist eigentlich nur ein
Coprozessor, gleichwohl er mittlerweile mehr Rechenleistung hat.

NatĂźrlich kĂśnnte man den Linux-Kernel so manipulieren, dass er
irgendetwas in /proc/cpuinfo schreibt. Spätestens aber, wenn man die
VC Kommandos, die diesem als Grundlage dienen, direkt aufruft, wird es
eng. vcgencmd otp_dump spuckt die Serial direkt aus.

Ja... und was ist wenn ich ein eigenes vcgencmd davorschalte welches das
echte aufruft und alles ausser der Ser# sauber durchreicht und die
passend umschreibt?

Ist ja nicht so, daß das eine neue Idee wäre.

 Gerrit

Ich hab jetzt von Linux keine Ahnung, aber...

könnte man nicht die Systemdateien auf Änderungen checken?
Also eine oder mehrere Checksummen Ăźber die entsprechenden Bin-Dateien
berechnen und diese im Anwendungsprogramm ĂźberprĂźfen?

Dann ist zwar kein Linux-Update mehr mĂśglich, aber das ist zumindest bei
meiner Anwendung gar nicht notwendig.
 
On 2/4/19 8:40 PM, Stefan wrote:
Am 04.02.2019 um 20:06 schrieb Gerrit Heitsch:
On 2/4/19 7:54 PM, Marcel Mueller wrote:
Am 04.02.19 um 17:15 schrieb Manuel Reimer:
On 2/4/19 8:57 AM, Stefan wrote:
Welche MĂśglichkeit gibt es noch? Gibt es die MĂśglichkeit, die
Seriennummer der CPU oder eines anderen Bausteins auszulesen?

Ja.

Gibt es eine MĂśglichkeit jemanden mit fundierten Linux-Kenntnissen
daran zu hindern diese zu manipulieren?

Nein.

Das stimmt so nicht wirklich. Die Seriennummer wird vom
/Hauptprozessor/ des Pi, der VCU verwaltet. Die Firmware dafĂźr ist
aber /nicht Open-Source/. Der ARM Core ist eigentlich nur ein
Coprozessor, gleichwohl er mittlerweile mehr Rechenleistung hat.

NatĂźrlich kĂśnnte man den Linux-Kernel so manipulieren, dass er
irgendetwas in /proc/cpuinfo schreibt. Spätestens aber, wenn man die
VC Kommandos, die diesem als Grundlage dienen, direkt aufruft, wird
es eng. vcgencmd otp_dump spuckt die Serial direkt aus.

Ja... und was ist wenn ich ein eigenes vcgencmd davorschalte welches
das echte aufruft und alles ausser der Ser# sauber durchreicht und die
passend umschreibt?

Ist ja nicht so, daß das eine neue Idee wäre.

  Gerrit


Ich hab jetzt von Linux keine Ahnung, aber...

könnte man nicht die Systemdateien auf Änderungen checken?
Also eine oder mehrere Checksummen Ăźber die entsprechenden Bin-Dateien
berechnen und diese im Anwendungsprogramm ĂźberprĂźfen?

Kann man tun... der nächste Trick ist dann ein rootkit (nicht vergessen,
der Angreifer hat die Karte und ist damit root) welches den passenden
Aufruf abändert, so daß hier die korrekten Werte geliefert werden.

Oder er nimmt sich deine App, findet raus wo im Binary die Abfrage der
S/N passiert und patcht dort.

Du kannst es recht aufwendig machen, aber fĂźr unmĂśglich musst du an SEHR
viele Dinge denken und alles richtig machen.

Gerrit
 
Stefan <df9bi@arcor.de> wrote:


>Ich hab jetzt von Linux keine Ahnung, aber...

So ungefaehr ab dieser Stelle musst du dir keine weiteren Gedanken machen. :-D

Olaf
 
Am 04.02.19 um 20:06 schrieb Gerrit Heitsch:
NatĂźrlich kĂśnnte man den Linux-Kernel so manipulieren, dass er
irgendetwas in /proc/cpuinfo schreibt. Spätestens aber, wenn man die
VC Kommandos, die diesem als Grundlage dienen, direkt aufruft, wird es
eng. vcgencmd otp_dump spuckt die Serial direkt aus.

Ja... und was ist wenn ich ein eigenes vcgencmd davorschalte welches das
echte aufruft und alles ausser der Ser# sauber durchreicht und die
passend umschreibt?

Das war nur als Beispiel gedacht. Man kann die API problemlos selber
aufrufen. Siehe
https://github.com/raspberrypi/firmware/blob/master/opt/vc/include/interface/vmcs_host/vcgencmd.h
https://github.com/raspberrypi/firmware/wiki/Mailbox-property-interface
-> Get board serial (0x10004)

Ist ja nicht so, daß das eine neue Idee wäre.

Marcel
 
Am 04.02.19 um 20:40 schrieb Stefan:
könnte man nicht die Systemdateien auf Änderungen checken?
Also eine oder mehrere Checksummen Ăźber die entsprechenden Bin-Dateien
berechnen und diese im Anwendungsprogramm ĂźberprĂźfen?

Du glaubst gar nicht, wie viele Fehlalarme das gibt.

Lass den Quatsch, nimm die Seriennummer, und gut. Das ist mehr als Du
auf jedem handelsĂźblichen PC bekommen kannst.

Wenn Du paranoid bist, dann rufe die Mailbox der Firmware selber auf.
Siehe auch meine Antwort auf Gerrit. Ansonsten tut es /proc/cpuinfo, wie
vorgeschlagen.


Marcel
 
Marcel Mueller <news.5.maazl@spamgourmet.org> wrote:

Lass den Quatsch, nimm die Seriennummer, und gut. Das ist mehr als Du
auf jedem handelsüblichen PC bekommen kannst.

So isses. Der normale Angreifer gibt an der Stelle längst auf.

Wir haben in unseren Geräten die Prozedur des Softwareupdates im PC,
bei der i.d.R. auch die DSP-Hardware neu geflasht wird, an die
Seriennummer des DSP-Moduls gebunden, die in einem schreibgeschützten
Block des FLASH von uns hinterlegt wird. Der einzugebende product key
zusammen mit dieser Seriennummer ist das PW zum Kryptoschlüssel zur
Dechiffrierung der FLASH-Daten. Ferner ist JTAG über den PLD geführt,
und der reicht das nur mit einer eigenen debug-Version weiter an den
DSP, während das release-image im PLD JTAG abwürgt. Die Maßnahmen
haben bisher mehr als ausgereicht.


-ras

--
Ralph A. Schmid +49-171-3631223 +49-911-21650056
http://www.schmid.xxx/ http://www.db0fue.de/
http://www.bclog.de/ http://www.kabuliyan.de/
 
Am 04.02.2019 um 21:26 schrieb Marcel Mueller:
Am 04.02.19 um 20:40 schrieb Stefan:
könnte man nicht die Systemdateien auf Änderungen checken?
Also eine oder mehrere Checksummen Ăźber die entsprechenden Bin-Dateien
berechnen und diese im Anwendungsprogramm ĂźberprĂźfen?

Du glaubst gar nicht, wie viele Fehlalarme das gibt.

Lass den Quatsch, nimm die Seriennummer, und gut. Das ist mehr als Du
auf jedem handelsĂźblichen PC bekommen kannst.

Momentan diskutiere ist nur und sammle Infos. Wie weiter oben
geschrieben habe ich keine Ahnung von Linux, will aber die Problematik
verstehen, auch wenn das dann jemand anders programmiert.

Wenn Du paranoid bist, dann rufe die Mailbox der Firmware selber auf.
Siehe auch meine Antwort auf Gerrit. Ansonsten tut es /proc/cpuinfo, wie
vorgeschlagen.

Ich gehe momentan davon aus, dass es ausreicht, die Seriennummer abzufragen.

Es geht auch nicht primär um einen Kopierschutz sondern darum,
Manipulationen an den jeweiligen Geräten zu verhindern. Da wäre es
fatal, wenn jemand einfach nur die SD-Karte aus einem Gerät herausziehen
muss um diese dann in einen amderen System laufen zu lassen.

Der Kunde kauft ein Gerät und damit auch eine Software. Ohne die
spezielle Hardware ist die Software eh sinnlos. Aber wenn er eine
SD-Karte aus einem Gerät in ein anderes steckt und die Software das
nicht merkt, haben wir ein Problem.
 
Marcel Mueller <news.5.maazl@spamgourmet.org> wrote:
Am 04.02.19 um 20:40 schrieb Stefan:
könnte man nicht die Systemdateien auf Änderungen checken?
Also eine oder mehrere Checksummen Ăźber die entsprechenden Bin-Dateien
berechnen und diese im Anwendungsprogramm ĂźberprĂźfen?

Du glaubst gar nicht, wie viele Fehlalarme das gibt.

Lass den Quatsch, nimm die Seriennummer, und gut. Das ist mehr als Du
auf jedem handelsĂźblichen PC bekommen kannst.

Wenn Du paranoid bist, dann rufe die Mailbox der Firmware selber auf.
Siehe auch meine Antwort auf Gerrit. Ansonsten tut es /proc/cpuinfo, wie
vorgeschlagen.

Man kĂśnnte die Konfigurationsdatei(en) der eigenen Anwendung mit Hilfe der
Seriennummer verschlĂźsseln, indem man die Seriennummer als Seed eines PRNG
verwendet. Das macht es noch ein bisschen schwieriger. Letztendlich hilft
es aber nichts, wenn der Benutzer auf dem Gerät root werden kann.

--
Dipl.-Inform(FH) Peter Heitzer, peter.heitzer@rz.uni-regensburg.de
 
On 04.02.19 19:54, Marcel Mueller wrote:
Am 04.02.19 um 17:15 schrieb Manuel Reimer:
On 2/4/19 8:57 AM, Stefan wrote:
Welche MĂśglichkeit gibt es noch? Gibt es die MĂśglichkeit, die
Seriennummer der CPU oder eines anderen Bausteins auszulesen?

Ja.

Gibt es eine MĂśglichkeit jemanden mit fundierten Linux-Kenntnissen
daran zu hindern diese zu manipulieren?

Nein.

Das stimmt so nicht wirklich. Die Seriennummer wird vom /Hauptprozessor/
des Pi, der VCU verwaltet. Die Firmware dafĂźr ist aber /nicht
Open-Source/. Der ARM Core ist eigentlich nur ein Coprozessor,
gleichwohl er mittlerweile mehr Rechenleistung hat.

NatĂźrlich kĂśnnte man den Linux-Kernel so manipulieren, dass er
irgendetwas in /proc/cpuinfo schreibt.

/proc ist ein ge-mount-etes Pseudo-Dateisystem. Zum Einen kĂśnnte man,
fĂźr eine kurze Zeit, etwas anderes dort mount-en, zum Anderen kann der
kompetente Linux-Benutzer sich einen eigenen Dateisystem-Treiber fĂźr
procfs schreiben ...

Josef
 
Stefan <df9bi@gmx.de> wrote:

>Ich gehe momentan davon aus, dass es ausreicht, die Seriennummer abzufragen.

Ja, unter den untengenannten Bedingungen absolut.

Es geht auch nicht primär um einen Kopierschutz sondern darum,
Manipulationen an den jeweiligen Geräten zu verhindern. Da wäre es
fatal, wenn jemand einfach nur die SD-Karte aus einem Gerät herausziehen
muss um diese dann in einen amderen System laufen zu lassen.

Eben :)


-ras

--
Ralph A. Schmid +49-171-3631223 +49-911-21650056
http://www.schmid.xxx/ http://www.db0fue.de/
http://www.bclog.de/ http://www.kabuliyan.de/
 
On 2/4/19 9:22 PM, Marcel Mueller wrote:
Das war nur als Beispiel gedacht. Man kann die API problemlos selber
aufrufen. Siehe
https://github.com/raspberrypi/firmware/blob/master/opt/vc/include/interface/vmcs_host/vcgencmd.h

https://github.com/raspberrypi/firmware/wiki/Mailbox-property-interface
-> Get board serial (0x10004)

Und zusammen mit den Headern kann ich in kĂźrzester Zeit eine kompatible
*.so kompilieren die an das Original ankoppelt. Dann einmal alle Befehle
ans Original weitergeben bis auf die, die ich Ăźbersteuern will.

Oder noch besser: Direkt nur das exportieren was ich Ăźbersteuern will
und meine Lib via LD_PRELOAD zuladen.

Gruß

Manuel
 
On 2019-02-05, Stefan <df9bi@gmx.de> wrote:
Der Kunde kauft ein Gerät und damit auch eine Software. Ohne die
spezielle Hardware ist die Software eh sinnlos. Aber wenn er eine
SD-Karte aus einem Gerät in ein anderes steckt und die Software das
nicht merkt, haben wir ein Problem.

Wie kommuniziert der Raspi denn mit Deiner Hardware? Du hast damit doch
praktisch Dein eigenes Dongle (in Form der externen Hardware), an die man
die Konfiguration binden kann.

Wenn ich Dich richtig verstehe, wäre es ja egal, wenn der Raspi getauscht
wird, die SD-Karte aber weiterhin am gleichen Exempler der externen Hardware
betrieben wird?

cu
Michael
 
On 2019-02-05, Josef Moellers <josef.moellers@invalid.invalid> wrote:
/proc ist ein ge-mount-etes Pseudo-Dateisystem. Zum Einen kĂśnnte man,
fĂźr eine kurze Zeit, etwas anderes dort mount-en, zum Anderen kann der
kompetente Linux-Benutzer sich einen eigenen Dateisystem-Treiber fĂźr
procfs schreiben ...

IIRC kann man mit einem bind-mount eine einzelne Datei nach /proc/cpuinfo
mounten - der Inhalt ist ja statisch. Das habe ich vor einiger Zeit mal
gemacht, um Ubuntu beizubringen, daß der Pentium-M im Notebook PAE kann,
auch, wenn er das in /proc/cpuinfo nicht meldet.

cu
Michael
 

Welcome to EDABoard.com

Sponsor

Back
Top