AES Reverseengineering

Begonnen von jab, 12 Februar 2014, 13:51:29

Vorheriges Thema - Nächstes Thema

jab

Hi Michael,

das sieht ja super aus. Das wusste ich nicht. Danke dir! Dann war mein Debugging mit IDA ja redundant eigentlich und bestätigt das eigentlich nur. Warum ist das eigentlich noch nicht in FHEM eingebaut?

Ok dann back to track: Was wissen wir über den Funk AES?
- Nachricht wird gesendet (1)
- ACK wird gesendet mit Signing Flag (?) (2)
- AES Signatur wird gesendet (3)

Jetzt die Frage: Was wird signiert? Die Nachricht (1), wenn ja was aus der Nachricht? Oder gibt es irgendeine Challenge im ACK (2)?

Wissen wir über den Algorithmus? Irgendwelche Erkenntnisse? IVs? Randomseeds? Wir haben ja keinen vernünftigen Random auf den Controllern.


Gruß,
Jan

martinp876

hi,

klar rede ich von funk.
Ich denke das flag entdeckt zu haben, mit dem HMLAN einem device nur antwortet, wenn es vorher "die AES-frage" beantworten kann.
Es betrifft also die Kommunikation zwischen FHEM und den Devices. virtuellen aktoren sind aussen vor! Die lassen sich so nicht bedienen.
natuerlich geht es nicht fuer CUL, da braucht es den Algorythmus, den ihr sucht.

Gruss Martin

ulli

Hallo zusammen,

Was ist eigentlich aus dem Thema geworden? Wäre sehr interessiert daran um es für einen keymatic nutzen zu können.

Grüße ulli

nobody42

Nur mal als Einwurf: auf dem 30C3 wurde auch Homematic behandelt.
Infos bekommt man bestimmt von den Autoren, wenn man nett fragt.

http://media.ccc.de/browse/congress/2013/30C3_-_5444_-_en_-_saal_g_-_201312301600_-_attacking_homematic_-_sathya_-_malli.html#video


mgernoth

Hallo,

ich denke hier sollte es auch rein:

Zu AES-Key siehe auch Pastebin-Link im 2. Beitrag des folgenden aus dem Homegear-Forum: https://forum.homegear.eu/viewtopic.php?t=217#p1485

Gruss
  Michael

mgernoth

Hallo,


fhem> set COC hmPairForSec 30
2015-06-07 15:50:48 CUL COC hmPairForSec 30
2015-06-07 15:50:54 Global global DEFINED HM_1ED017
2015-06-07 15:50:54 Global global DEFINED FileLog_HM_1ED017
2015-06-07 15:50:54 Global global SAVE
2015-06-07 15:50:54 CUL COC SND L:10 N:02 F:A0 CMD:01 SRC:68EA14 DST:HM_1ED017 00050000000000 (CONFIG_START CHANNEL:0x00 PEER_ADDRESS:0x000000 PEER_CHANNEL:0x00 PARAM_LIST:0x00) (,BIDI,RPTEN)
2015-06-07 15:50:54 CUL_HM HM_1ED017 D-firmware: 1.9
2015-06-07 15:50:54 CUL_HM HM_1ED017 D-serialNr: JEQ0697776
2015-06-07 15:50:54 CUL_HM HM_1ED017 R-pairCentral: set_0x68EA14
2015-06-07 15:50:54 CUL COC RCV L:0A N:02 F:80 CMD:02 SRC:HM_1ED017 DST:68EA14 00 (ACK) (,RPTEN)
2015-06-07 15:50:54 CUL COC SND L:13 N:03 F:A0 CMD:01 SRC:68EA14 DST:HM_1ED017 000802010A680BEA0C14 (CONFIG_WRITE_INDEX CHANNEL:0x00 DATA: 02:01 0A:68 0B:EA 0C:14) (,BIDI,RPTEN)
2015-06-07 15:50:54 CUL COC RCV L:0A N:03 F:80 CMD:02 SRC:HM_1ED017 DST:68EA14 00 (ACK) (,RPTEN)
2015-06-07 15:50:55 CUL COC SND L:0B N:04 F:A0 CMD:01 SRC:68EA14 DST:HM_1ED017 0006 (CONFIG_END CHANNEL:0x00) (,BIDI,RPTEN)
2015-06-07 15:50:55 CUL COC RCV L:0A N:04 F:80 CMD:02 SRC:HM_1ED017 DST:68EA14 00 (ACK) (,RPTEN)

fhem> set HM_1ED017 getConfig
...

fhem> set HM_1ED017 on
2015-06-07 15:54:18 CUL_HM HM_1ED017 set_on
2015-06-07 15:54:18 CUL COC SND L:0E N:0F F:A0 CMD:11 SRC:68EA14 DST:HM_1ED017 0201C80000 (SET CHANNEL:0x01 VALUE:0xC8 RAMPTIME:2) (,BIDI,RPTEN)
2015-06-07 15:54:18 CUL COC RCV L:0E N:0F F:80 CMD:02 SRC:HM_1ED017 DST:68EA14 0101C80021 (ACK_STATUS CHANNEL:0x01 STATUS:0xC8 UP:0 DOWN:0 LOWBAT:0 RSSI:-33) (,RPTEN)
2015-06-07 15:54:18 CUL_HM HM_1ED017 deviceMsg: on (to COC)
2015-06-07 15:54:18 CUL_HM HM_1ED017 level: 100
2015-06-07 15:54:18 CUL_HM HM_1ED017 pct: 100
2015-06-07 15:54:18 CUL_HM HM_1ED017 on
2015-06-07 15:54:18 CUL_HM HM_1ED017 timedOn: off

fhem> set HM_1ED017 sign on
2015-06-07 15:54:32 CUL_HM HM_1ED017 R-sign: set_on
2015-06-07 15:54:32 CUL COC SND L:10 N:10 F:A0 CMD:01 SRC:68EA14 DST:HM_1ED017 01050000000001 (CONFIG_START CHANNEL:0x01 PEER_ADDRESS:0x000000 PEER_CHANNEL:0x00 PARAM_LIST:0x01) (,BIDI,RPTEN)
2015-06-07 15:54:32 CUL COC RCV L:0A N:10 F:80 CMD:02 SRC:HM_1ED017 DST:68EA14 00 (ACK) (,RPTEN)
2015-06-07 15:54:32 CUL COC SND L:0D N:11 F:A0 CMD:01 SRC:68EA14 DST:HM_1ED017 01080801 (CONFIG_WRITE_INDEX CHANNEL:0x01 DATA: 08:01) (,BIDI,RPTEN)
2015-06-07 15:54:32 CUL COC RCV L:0A N:11 F:80 CMD:02 SRC:HM_1ED017 DST:68EA14 00 (ACK) (,RPTEN)
2015-06-07 15:54:32 CUL COC SND L:0B N:12 F:A0 CMD:01 SRC:68EA14 DST:HM_1ED017 0106 (CONFIG_END CHANNEL:0x01) (,BIDI,RPTEN)
2015-06-07 15:54:32 CUL COC RCV L:0A N:12 F:80 CMD:02 SRC:HM_1ED017 DST:68EA14 00 (ACK) (,RPTEN)

fhem> set HM_1ED017 off
2015-06-07 15:56:56 CUL_HM HM_1ED017 set_off
2015-06-07 15:56:56 CUL COC SND L:0E N:22 F:A0 CMD:11 SRC:68EA14 DST:HM_1ED017 0201000000 (SET CHANNEL:0x01 VALUE:0x00 RAMPTIME:2) (,BIDI,RPTEN)
2015-06-07 15:56:57 CUL COC RCV L:11 N:22 F:A0 CMD:02 SRC:HM_1ED017 DST:68EA14 04FCBAE287E31E00 (AES_req Para1:0xFCBA Para2:0xE287 Para3:0xE31E keyNo:0x00) (,BIDI,RPTEN)
2015-06-07 15:56:57 CUL COC SND L:0A N:22 F:80 CMD:02 SRC:68EA14 DST:HM_1ED017 00 (ACK) (,RPTEN)
2015-06-07 15:56:57 CUL_HM HM_1ED017 aesKeyNbr: 00
2015-06-07 15:56:57 CUL COC RCV L:19 N:22 F:A0 CMD:03 SRC:68EA14 DST:HM_1ED017 3B2C43920C729737C2A232AB169C586F (AES reply DATA:0x3B2C43920C729737C2A232AB169C586F) (,BIDI,RPTEN)
2015-06-07 15:56:57 CUL COC RCV L:19 N:22 F:A0 CMD:03 SRC:68EA14 DST:HM_1ED017 3B2C43920C729737C2A232AB169C586F (AES reply DATA:0x3B2C43920C729737C2A232AB169C586F) (,BIDI,RPTEN)
2015-06-07 15:56:57 CUL COC UNKNOWNCODE A1922A00368EA141ED0173B2C43920C729737C2A232AB169C586F::-48:COC
2015-06-07 15:56:57 CUL COC RCV L:12 N:22 F:80 CMD:02 SRC:HM_1ED017 DST:68EA14 0101000036F17BA8A9 (ACK_STATUS CHANNEL:0x01 STATUS:0x00 UP:0 DOWN:0 LOWBAT:0 RSSI:-54) (,RPTEN)
2015-06-07 15:56:57 CUL_HM HM_1ED017 deviceMsg: off (to COC)
2015-06-07 15:56:57 CUL_HM HM_1ED017 level: 0
2015-06-07 15:56:57 CUL_HM HM_1ED017 pct: 0
2015-06-07 15:56:57 CUL_HM HM_1ED017 off
2015-06-07 15:56:57 CUL_HM HM_1ED017 timedOn: off


More to come :-)

frank

cool. dein coc spricht aes?  8)
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

mgernoth

#22
Zitat von: frank am 07 Juni 2015, 16:20:23
cool. dein coc spricht aes?  8)

Nein, die rfbee mit culfw am Beaglebone daneben :-)
War der einfachste proof-of-concept Aufbau.

Gruss
  Michael

Ralli

Top. Respekt!

Damit dürfte es ja tatsächlich möglich sein

1) AES in Homematic komplett in fhem zu implementieren und komplett auf die Win-Software zu verzichten
2) AES in die culfw einzubauen und somit CULs, COCs und wie sie alle heißen ebenfalls statt HM-CFG-USB oder HMLAN nutzen zu müssen.

Gruß,
Ralli

Proxmox 8.4 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.81.5.20250527) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

mgernoth

#24
Hallo,

so, was lange währt ... ;-)

https://git.zerfleddert.de/hmcfgusb/AES/

Das AES habe ich in meinem Testaufbau nicht in der culfw implementiert (da würde es gar nicht mehr reinpassen), sondern in einem kleinen Perlskript, welches (wie Fhem) mit dem CUL (Rfbee) redet.

Aber das sollte direkt in 10_CUL_HM implementiert werden, mein Testhack ist nicht mehr als genau das, ein übler Hack der einfach alle AES Signaturrequests beantwortet.
Nachdem ich gestern den ganzen Tag mit dem Finden des Algorithmus verbracht habe, hatte ich heute keine Lust und Zeit mehr es richtig zu implementieren. Ausserdem muss ich dazu wahrscheinlich Martin ziemlich löchern, da mir doch viel Wissen über die Internals von 10_CUL_HM.pm fehlt (wie komme ich z.B. an das zuletzt an das Gerät gesendete Frame, bzw. geht das überhaupt).

Gruß
  Michael

trilu

respekt!!!!!!!
ich muss mir das mal genauer anschauen und verstehen, vielleicht bekomme ich es ja in die Newasksin rein....
wäre der hammer, damit hätte man eine komplett emulation :-)

mgernoth

Hallo,

ich habe jetzt mal das Challenge-Response in 10_CUL_HM.pm reingehackt und einen Diff hier angehaengt. Damit kann man jetzt AES-Geraete bedienen (bisher nur mit statisch konfiguriertem Defaultkey).

Leider fehlt mir mehr Wissen ueber die Internas von CUL_HM um das schoen zu machen, evtl. kann Martin sich das mal anschauen und es so hinbauen, dass es zum Rest von CUL_HM passt, man den Schluessel auch setzen kann (z.Zt wird bei einer Schluesselnummer != 00 ein Fehler ausgegeben und dann trotzdem der hartkodierte Defaultschluessel verwendet) und in der Response die ersten 6 Bytes auf einen Zeitstempel gesetzt werden. Und das ganze sollte nur ausgefuehrt werden, wenn es auch wirklich von einem CUL-Device empfangen wurde...


2015-06-08 23:53:03 CUL_HM Steckdose_Test set_toggle
2015-06-08 23:53:03 CUL COC SND L:0E N:01 F:A0 CMD:11 SRC:68EA14 DST:Steckdose_Test 0201000000 (SET CHANNEL:0x01 VALUE:0x00 RAMPTIME:2) (,BIDI,RPTEN)
2015-06-08 23:53:03 CUL COC RCV L:11 N:01 F:A0 CMD:02 SRC:Steckdose_Test DST:68EA14 0463906CE1765E00 (AES_req Para1:0x6390 Para2:0x6CE1 Para3:0x765E keyNo:0x00) (,BIDI,RPTEN)
2015-06-08 23:53:03 CUL COC SND L:19 N:01 F:A0 CMD:03 SRC:68EA14 DST:Steckdose_Test ce1968c7333714ffc23603be6db057d1 (AES reply DATA:0xce1968c7333714ffc23603be6db057d1) (,BIDI,RPTEN)
2015-06-08 23:53:03 CUL COC SND L:0A N:01 F:80 CMD:02 SRC:68EA14 DST:Steckdose_Test 00 (ACK) (,RPTEN)
2015-06-08 23:53:03 CUL_HM Steckdose_Test CUL_HM signing request for As0E01A01168EA141ED0170201000000 challenge:  63906CE1765E kNo: 00
2015-06-08 23:53:03 CUL_HM Steckdose_Test aesKeyNbr: 00
2015-06-08 23:53:03 CUL COC RCV L:12 N:01 F:80 CMD:02 SRC:Steckdose_Test DST:68EA14 010100001EE57EFEE6 (ACK_STATUS CHANNEL:0x01 STATUS:0x00 UP:0 DOWN:0 LOWBAT:0 RSSI:-30) (,RPTEN)
2015-06-08 23:53:03 CUL_HM Steckdose_Test deviceMsg: off (to COC)
2015-06-08 23:53:03 CUL_HM Steckdose_Test level: 0
2015-06-08 23:53:03 CUL_HM Steckdose_Test pct: 0
2015-06-08 23:53:03 CUL_HM Steckdose_Test off
2015-06-08 23:53:03 CUL_HM Steckdose_Test timedOn: off


Gruss
  Michael

mgernoth

#27
Hallo,

so habe das ganze nochmal etwas aufgeraeumt und angehaengt.

Offene Punkte sind noch:

  • Wie kann man Schluessel fuer einen CUL definieren, oder soll das nur an der VCCU funktionieren?
  • Wie kann man dann auf diese Schluessel zugreifen (die muessen an den jeweiligen Schluesselindex im @keys-Array im ACK-AES)?
  • Wie kann das zusaetzlich generierte ACK (neben der Signing-response) unterbunden werden? Habe dazu in CUL_HM_parseCommon keine Moeglichkeit gefunden, auf @ack Einfluss zu nehmen.
  • Wie koennen die vom Geraet in der ACK-Nachricht zurueckgelieferten 4 Bytes mit den im Signierungsprozess erzeugten verglichen werden?

Gruss
  Michael

martinp876

man kann jetzt assignHmKey probieren.
testen muss man selbst. Die Kommandos kommen - ob es klappt muss man sehen. Sicher noch etwas docu zu leisten!

mgernoth

Hallo Martin,

Zitat von: martinp876 am 09 Juni 2015, 21:10:10
man kann jetzt assignHmKey probieren.
testen muss man selbst.

Funktioniert wunderbar, vielen Dank :-)

Zitat
Die Kommandos kommen - ob es klappt muss man sehen. Sicher noch etwas docu zu leisten!

Soll ich da ein/zwei Saetze schreiben?

Ich habe mal die neuesten Version der AES CUL-Implementierung angehaengt, es hat eine Interpretierung der Schluesselnummer als Hex gefehlt.

Viele Gruesse
  Michael