TesterPresent (0x3E)
UDS TesterPresent (0x3E) hält eine Non-Default Session am Leben. Request- und Response-Bytes, das Suppress-Bit, der S3-Server-Timer und die Session-Bugs am Prüfstand.
Aktualisiert Diese Seite als Markdown
Kurz gesagt
TesterPresent (0x3E) ist der Keep-Alive von UDS: Der Tester sendet ihn periodisch, damit das Steuergerät weiß, dass noch ein Tester verbunden ist, und in der Extended oder Programming Session bleibt. Der Request ist 3E 00, die Antwort 7E 00, und 3E 80 unterdrückt die Antwort. Ohne ihn läuft der S3-Server-Timer ab, das Steuergerät fällt in die Default Session zurück und sperrt SecurityAccess. Steuergeräte, die nie in den Timeout laufen oder eine Programming Session stundenlang per TesterPresent halten lassen, sind Findings.
Was ist TesterPresent (0x3E)?
TesterPresent ist der Keep-Alive von UDS. Ein Tester sendet ihn periodisch, um dem Steuergerät zu sagen, dass er noch da ist, damit das Steuergerät in der gewählten Session bleibt, statt in die Default Session zurückzufallen. Der Request hat zwei Bytes, 3E 00 (Sub-Funktion zeroSubFunction), die positive Antwort ist 7E 00. Mit gesetztem suppressPosRspMsgIndicationBit, 3E 80, antwortet das Steuergerät gar nicht, und so senden ihn die meisten Tester.
Der Service trägt keine Daten und löst im Steuergerät nichts aus. Seine einzige Aufgabe ist, den Session-Timer zurückzusetzen.
Wo ist es definiert?
ISO 14229-1:2020 definiert TesterPresent (0x3E) in Kapitel 9 (Diagnostic and communication management functional unit), zusammen mit DiagnosticSessionControl (0x10), ECUReset (0x11), SecurityAccess (0x27) und den anderen Services auf Session-Ebene. Das Timing, das er am Leben hält, ist der S3-Server-Timer der Session-Schicht (ISO 14229-2 für das generische Timing, üblicher Default 5000 ms). Läuft S3 in einer Non-Default Session ab, muss das Steuergerät in die Default Session zurückkehren; damit enden auch ein SecurityAccess-Unlock, und ControlDTCSetting sowie CommunicationControl fallen auf ihre Defaults zurück.
Auf CAN wird TesterPresent typischerweise funktional an alle Steuergeräte am Bus gesendet, zum Beispiel auf der 11-Bit-ID 0x7DF, als einzelner ISO-15765-2-Frame 02 3E 80 00 00 00 00 00, alle zwei bis vier Sekunden.
Was es in der Praxis bedeutet
Jeder automatisierte UDS-Test hängt an diesem Service. Bei der Enumeration der Extended Session, bei einem SecurityAccess-Seed/Key-Lauf oder beim Fuzzing wirft ein fehlender TesterPresent das Steuergerät still in die Default Session zurück, und ab dann antwortet jede Probe mit 7F xx 7F serviceNotSupportedInActiveSession. Tester, die den Keep-Alive vergessen, produzieren Ergebnisse, die wie ein dicht gemachtes Steuergerät aussehen.
Am Prüfstand ist die andere Richtung interessant. Wir sehen regelmäßig Steuergeräte, bei denen TesterPresent die Programming Session unbegrenzt am Leben hält, mit entsperrtem SecurityAccess, sodass der einmalige Unlock eines Flash-Tools zum Dauerzustand wird, solange jemand 3E 80 sendet. Wir sehen auch Steuergeräte ganz ohne S3: Der Tester wird abgezogen, und das Steuergerät bleibt in der Extended Session, während CommunicationControl weiter den normalen Busverkehr abschaltet. Und manche Steuergeräte antworten während eines Resets oder Absturzes weiter mit 7E 00, was naive Crash-Erkennung täuscht. Ein Liveness-Check braucht einen Service, der die Applikation wirklich fordert, oder mindestens eine Prüfung, dass die Session noch die erwartete ist.
Wie AutoST es testet
AutoST sendet TesterPresent als konfigurierbaren Keep-Alive jedes Scans, damit Sessions während Enumeration, DID-Scan und SecurityAccess-Prüfungen nicht abfallen. In der Fuzzing-Engine läuft nach jeder Iteration ein TesterPresent-Liveness-Check, immer aktiv; ein Steuergerät, das nicht mehr antwortet, wird als Crash mit dem exakten vorangegangenen Payload festgehalten. Die Enumeration hält außerdem fest, ob eine Non-Default Session ohne Keep-Alive überlebt, was Steuergeräte mit fehlendem oder viel zu langem S3-Timer sichtbar macht.
Häufige Missverständnisse
TesterPresent entsperrt nichts, verlängert SecurityAccess nicht von sich aus und zählt nicht als Aktivität für die P2-Timer; die gehören zu einzelnen Requests. Er hält nur die Session. Und dass 3E 80 keine Antwort bekommt, ist kein Fehler: Die Antwort ist absichtlich unterdrückt. Willst du wissen, ob das Steuergerät lebt, sende 3E 00 und erwarte 7E 00.
FAQ
Häufig gestellte Fragen
Warum wird TesterPresent meist mit 0x80 gesendet?
Das Sub-Funktions-Byte 0x80 setzt das suppressPosRspMsgIndicationBit, das Steuergerät antwortet dann nicht. Bei einem funktional adressierten Request (CAN-ID 0x7DF) verhindert das, dass alle Steuergeräte am Bus alle paar Sekunden gleichzeitig antworten.
Was passiert, wenn TesterPresent ausbleibt?
Der S3-Server-Timer im Steuergerät läuft ab, typischerweise nach 5 Sekunden, und das Steuergerät kehrt in die Default Session zurück. Ein SecurityAccess-Unlock fällt dabei weg. Ein Steuergerät, das nach dem Abziehen des Testers in der Extended Session bleibt, hat einen Session-Handling-Bug.
Ist TesterPresent selbst ein Sicherheitsrisiko?
Für sich nicht; der Service trägt keine Daten und ändert keinen Zustand. Das Risiko ist, was er offen hält. Wenn ein Angreifer eine Programming Session mit entsperrtem SecurityAccess beliebig lange halten kann, fehlt dem Steuergerät jeder Mechanismus, eine Diagnosesitzung zu beenden, die niemand legitim nutzt.
Quellen
Passende Seiten
- GlossarDiagnose-Session (DiagnosticSessionControl 0x10)UDS DiagnosticSessionControl (0x10) wechselt ein Steuergerät zwischen Default, Extended und Programming Session. Bytes, Timing-Parameter und was zu prüfen ist.
- GlossarProgramming Session (0x10 0x02)Die UDS Programming Session (10 02) ist der Diagnosemodus zum Flashen eines Steuergeräts. Wie man hineinkommt, welche Services sie freischaltet, warum sie heikel ist.
- PlattformMach es am Prüfstand kaputt, nicht im Feld.AutoST fuzzt ECUs über UDS und CAN mit reproduzierbaren Seeds und Live-Crash-Erkennung per TesterPresent und DTC-Monitoring. Nur für den Prüfstand.
- PlattformKenne jede Tür ins ECU.AutoST enumeriert ein ECU über UDS: Diagnose-Endpunkte, Sessions, alle 255 Services und lesbare DIDs, plus XCP/CCP. Riskante Services werden markiert.
- InsightsECU-Reset- und Session-Handling-Fehler, und wie du sie testestWie du UDS-Session- und Reset-Verhalten testest: Session-Rückfall, S3-Timeout, Security-Zustand nach Reset, TesterPresent und was jedes Ergebnis bedeutet.
- PlattformHält dein Seed/Key wirklich?AutoST probt UDS SecurityAccess: Seed-Zufälligkeit, schwache Seed-zu-Key-Algorithmen, Default-Keys, Lockout und Sequenz. Begrenzt und nicht-destruktiv.
