Kuidas autot häkkida - kiire kokkupõrkekursus

Selle artikli eesmärk on käivitada autode häkkimine - kiire, odav ja lihtne. Selleks petame näiteks RPM-näidiku.

Järgnev pole sugugi ammendav õpetus. Selle eesmärk on pakkuda just piisavalt teavet, et teid tööle panna. Kui soovite süveneda, saate kassas kohustuslikud read lõpus lugeda.

Kui otsustate selle õpetuse reaalses elus läbi viia, vajate Linuxi arvutit (või virtuaalset Linuxi masinat) ja CAN-USB-seadet (mida uurime hiljem).

Auto on võrk

Auto koosneb mitmest arvutist mootori, käigukasti, akende, lukkude, tulede jms juhtimiseks. Neid arvuteid nimetatakse elektroonilisteks juhtseadmeteks (ECU) ja nad suhtlevad omavahel võrgu kaudu.

Näiteks kui vajutate raadio helitugevuse suurendamiseks roolil olevat nuppu, saadab rooli ECU võrku helitugevuse suurendamise käsu, seejärel näeb raadio ECU seda käsku ja toimib vastavalt sellele.

Autos on mitu võrku, tavaliselt vähemalt kaks:

  • Üks kriitiliste andmete, näiteks mootori ja jõuülekande teadete jaoks
  • Ja üks vähem kriitiliste andmete, näiteks raadio- ja ukselukkude jaoks

Kriitiline võrk kasutab kiiret ja usaldusväärset protokolli, mittekriitiline võrk aga aeglasemat, vähem usaldusväärset, kuid odavamat protokolli. Võrkude arv ja ka see, millised ECU-d on võrku ühendatud, sõltub auto margist, mudelist ja aastast. ECU võiks olla ühendatud ka mitme võrguga.

Ühendamine võrguga

Mõnele võrgule pääseb juurde OBD-II pordi kaudu. OBD-II on kohustuslik kõigile USA-s pärast 1996. aastat ja Euroopas pärast 2004. aastat ehitatud autodele ja kergetele veoautodele.

Pistik on juhiistmel käeulatuses. Võimalik, et peate mõne plastkatte maha tõstma, kuid sellele pääseb alati ilma tööriistadeta.

OBD-II standard võimaldab viit signaaliprotokolli. Tootja otsustada, millist neist kasutada. CAN on kõige populaarsem ja seda me arutame. Sellele pääseb juurde OBD-II pistiku tihvtide 6 ja 14 kaudu. Kui teie autol on CAN-buss, näete tihvtidel metallist juhtmeid nagu ülaltoodud pildil.

CAN-siin on usaldusväärne ja kiire buss, mida kasutatakse kriitiliste andmete saatmiseks. Kahjuks pole siinis olevad andmepaketid standardiseeritud, seega peate need ümber pöörama, et teada saada, mida need tähendavad. OBD-II standard jätab ruumi ka müüja spetsiifilistele tihvtidele, mida saab kasutada müüja spetsiifiliste protokollide jaoks. See muudab edasimüüjal probleemide diagnoosimise lihtsamaks.

Minu autol (GM) on mul tihvtidel 6 ja 14 tavaline CAN-siin ja tihvtil 1 müüja spetsiifiline ühe juhtmega CAN-siin. Standardne CAN-siin on usaldusväärne, kiire (500 kbps) protokoll, millele viidatakse ka kui kiire CAN (HS-CAN). Seda kasutatakse kriitiliste andmete saamiseks. Ühe juhtmega CAN-siin (SW-CAN) või GMLAN on aeglasem (33,3 kbps) ja vähem usaldusväärne, kuid odavam, kuna see kasutab ainult ühte traati. Seda siini kasutatakse mittekriitiliste andmete jaoks.

Kui näete hankija spetsiifilist nööpnõela ja ei tea, millist protokolli kasutatakse, siis Google'i „OBD-i pinout”. Samuti on olemas madala kiirusega CAN (LS-CAN) ja keskmise kiirusega CAN (MS-CAN). MS-CAN on tavaliselt tihvtidel 3 ja 11, mis töötab Fordi ja Volvo autodel kiirusega 125 kb / s.

Tööriistad

Andmete analüüsimiseks vajate nii seadet, mis on võimeline CAN-i andmeid tõlgendama, kui ka tarkvara

Riistvara

CAN-pakettide vastuvõtmiseks ja edastamiseks vajate seadet, mis on selleks võimeline. Sageli puutute kokku ELM327-põhiste seadmetega. Kuigi neid kasutatakse, on nad häkkimise jaoks kohutavad. Nad on CAN-siini jälgimiseks liiga aeglased.

Samuti on olemas tipptasemel seadmeid nagu Kvaser, Peak või EMS Wünsche. Need saavad töö tehtud, kuid on üleküllased ja üsna kallid.

Mõni tipptasemel seade nõuab tarkvara ostmist koos sellega. USB2CAN on Linuxi jaoks loodud kohalik CAN-liides, mis pakub head hinna ja kvaliteedi suhet.

Võite kasutada ka Cantactit või CANUSB-i. Need pole Linuxis siiski kohalikud CAN-seadmed ja kasutavad ASCII-põhist protokolli. See tähendab, et nende seadistamine on veidi keerulisem ja nende jõudlus on väiksem. Teiselt poolt on need mitmes opsüsteemis hästi toetatud.

Ma kasutan oma vajadustele mõeldud CANalyze'i. See sarnaneb USB2CAN-iga selle poolest, et see on taskukohane kohalik CAN-liides, kuid see kasutab uuemat mikrokontrollerit, on avatud lähtekoodiga ja selle saab ehitada avatud lähtekoodiga tööriistade abil. Selle õpetuse ülejäänud osa eeldab, et kasutate natiivset CAN-liidest.

Tarkvara

Seadmega suhtlemiseks peate oma Linuxi masinasse installima paketi can-utils. Seda saate teha, tippides Linuxi viipale järgmised andmed:

sudo apt-get install can-utils

Can-utils muudab CAN-pakettide saatmise, vastuvõtmise ja analüüsimise ülimalt lihtsaks. Need on käsud, mida me kasutame.

  • cansniffer kuvab ainult muutuvaid pakette
  • candump dump kõik vastuvõetud paketid
  • saab saata paketi

Linuxil on SocketCANi kaudu tuumasse sisseehitatud CAN-tugi. See muudab teie enda lisaprogrammide kirjutamise lihtsaks. CAN-siiniga saate suhelda samamoodi nagu mis tahes muu võrguga, st pistikupesade kaudu.

CAN-buss

Enne tagurdamise alustamist peaksite olema veidi aru saanud, kuidas CAN-buss töötab. See koosneb kahest juhtmest ja kasutab diferentsiaalsignaali. Kuna tegemist on siiniga, saab nende kahe juhtmega ühendada mitu seadet. Kui siinile saadetakse CAN-kaader, võtavad selle vastu kõik ECU-d, kuid seda töödeldakse ainult siis, kui see on ECU jaoks kasulik. Kui korraga saadetakse mitu CAN-kaadrit, võidab kõrgeima prioriteediga kaader. CAN-raamil on 3 osa, mis on meie jaoks asjakohased.

  • arbitraaži identifikaator Sõnumi identifikaator. ECU kasutab seda vastuvõetud kaadri töötlemiseks või ignoreerimiseks. See tähistab ka sõnumi prioriteeti. Väiksemal arvul on kõrgem prioriteet. Nii et näiteks kui te oleksite võrku projekteeriv insener, annaksite turvapatjade paigaldamise raamistikule väga kõrge prioriteedi või madala vahekohtu ID. Teiselt poolt annaksite ukselukkude jaoks mõeldud andmetele madalama prioriteedi või suurema vahekohtu ID.
  • andmepikkuse kood (DLC) näitab andmevälja pikkust baitides. CAN-kaadris võib olla maksimaalselt 8 baiti andmeid.
  • andmeväli Sisaldab kuni 8 baiti andmeid.

CAN-bussi tagurdamine

Üldine lähenemine CAN-siini tagurdamisele on genereerida käitumine, mida soovite jäljendada, ja leida sõnum, mis selle käitumise põhjustab. Näiteks oletame, et teie auto sõidurea hoidmise abisüsteem (LKAS) on jama ja olete ise selle teinud.

Roolimise juhtimiseks peate teadma, milliseid sõnumeid saata. Selle välja selgitamiseks peate sisse lülitama algse LKAS-i, jälgima CAN-siini ja tuvastama rooli keeramise eest vastutavad paketid. Kui olete need paketid tuvastanud, võite lasta oma LKAS-il need paketid rooli juhtimiseks CAN-siini saata.

Meie puhul tahame tahhomeetrit võltsida, nii et peame muutma pöörlemiskiirust, astudes gaasile sisselülitatud autoga ja neutraalasendis ning proovima seejärel leida kiiruse muutmise eest vastutav pakett.

Seadistamine

Ühendage CAN-seade auto OBD-II ja arvuti USB-porti. CAN-liidese toomiseks käivitage oma Linuxi viipas järgmine käsk:

sudo ip link set can0 up type can bitrate 500000

mis kuvab can0liidese (alati, can0kui teil on ühendatud ainult üks seade) bitikiirusega 500 kbps, mis on standardne.

Tuvastage

Kui auto on välja lülitatud, magavad ECU-d tavaliselt, nii et peate auto sisse lülitama või lisavarustusrežiimi panema. CAN-toorandmeid saate vaadata, käivitades selle oma Linuxi viipas:

candump can0

See prindib CAN-andmed ekraanile kohe, kui need on laekunud. See on aga väga organiseerimata ja on väga raske mõista, millised paketid teatud sündmusele vastavad. Programmi peatamiseks võite vajutada klahvikombinatsiooni Ctrl + c. Andmete loetavamaks muutmiseks kasutame cansnifferit, mis rühmitab paketid vahekohtu ID järgi ja näitab ainult muutuvaid pakette. Selle käivitamiseks käivitage käsk oma Linuxi viipas:

cansniffer -c can0

kus -cvärvib muutuvad baidid ja can0on nuusutamise liides. Pidevate pakettide eemaldamine võtab paar sekundit.

Peaksite nägema midagi sarnast allolevale pildile, kuigi arvud on tõenäoliselt täiesti erinevad.

Esimeses veerus (delta) on näidatud kiirus sekundites, mille jooksul selle vahekohtu ID-ga pakette võetakse vastu. Teine veerg (ID) sisaldab vahekohtu ID-d. Ülejäänud tähtnumbrilised veerud (andmed ...) sisaldavad andmebaidid. Kui andmetel on ASCII esitus, on neid paremal näha, muidu on see punkt.

Kui pöörlemiskiiruse suurendamiseks astute gaasile, kui mootor töötab, võib ekraanile ilmuda uusi ja / või olemasolevaid muutuvaid CAN-teateid.

Peame leidma CAN-teate, kus muutuvad baidid korreleeruvad RPM-i muutusega. Tõenäoliselt võime oodata, et väärtus suureneb / väheneb, kui RPM suureneb / väheneb.

Esimene CAN-i kaader, mis näib RPM-st erinev olevat, on vahekohtu ID-ga kaader C9. Tõenäoliselt on mitu potentsiaalset paketti, mis erinevad RPM-st, see on lihtsalt esimene.

Selles sõnumis on 4 baiti, mis muutuvad (punase värviga), kuid mitte kõik need ei tähenda tingimata RPM-i. Kolmanda baidi variatsioonid 07ei näi korreleeruvat erineva RPM-iga. Viimane bait 1Bteeb.

Kuid niipea, kui võtame jala gaasilt, läheb see 00. See näitaks, et see tähistab gaasi asendit, mitte pöörete arvu.

Lõpuks on kaks baiti, 21 C0mis näivad vastavat RPM-i muutusele. Veelgi enam, see varieerub 16-baidise täisarvuna, st kui teine C0bait 21saab üle, suureneb esimene bait ühe võrra. Samuti tundub, et see 21vastab umbes 2000 p / min. Seda on hea märkida, kui sõnumit uuesti esitate.

Kordus

Kui teil on kandidaat, saatke see CAN-i bussile järgmise käsuga oma Linuxi viip:

cansend can0 0C9#8021C0071B101000

kus raamil on vorming #{data} ja see tuleb asendada oma CAN-sõnumiga.

Teie auto võib selleks töötada või olla lisarežiimis. Kasutage kindlasti paketti, mille hankisite siis, kui mootor oli tühikäigul, muidu ei näe te mootori tühikäigul taasesitamisel midagi muutuvat.

Kui saadate lihtsalt paketi üks kord, ei näe tõenäoliselt armatuurlaual midagi muutuvat. Selle põhjuseks on asjaolu, et ECU saadab bussis endiselt 0,2-sekundiliste intervallidega pidevalt bussi, nii et teie teadet lihtsalt ignoreeritakse.

Tuletame meelde, et määr on toodud reklaami esimeses veerus. Nende teadete genereerimise ECU lahtiühendamise kõrval on kaks võimalust. Üks võimalus on saata paketid palju kiiremini kui praegu saadetavad. Seda saate teha, käivitades oma Linuxi viipas järgmise:

while true; do cansend can0 0C9#8021C0071B101000; sleep 0.002; done

ja asendage CAN-sõnum teie tuvastatud sõnumiga. Peatamiseks vajutage klahvikombinatsiooni Ctrl + c.

Teine võimalus on jälgida siini ja iga kord, kui tuvastate paketi, mida soovite võltsida, saatke oma pakett kohe pärast seda välja. Seda saab teha, käivitades oma Linuxi viiba:

candump can0 | grep " 0C9 " | while read line; do cansend can0 0C9#8021C0071B101000; done

kus peate asendama CAN-sõnumi ja 0C9identifitseeritud CAN-sõnumi ning selle vastavalt vahekohtu ID. Võite mõlema lähenemisega katsetada, et näha, kumb neist paremini töötab.

Kui tahhomeeter muutub, hea töö, leidsite selle! Kui ei, siis tuvastage järgmine RPM-iga vastav teade ja esitage see uuesti.

Fuzzing

Nüüd, kui teil on CAN-kaader, mis määrab RPM-i näidikute klastris, saate oma saadetud andmetega mängida, et näha, mis juhtub. Oleme märkinud, et RPM-ile vastavad kaks baiti käituvad 16-bitise täisarvuna, nii et tahhomeetri seadmiseks 8 k RPM-ni käitame teie Linuxi viipas järgmist:

while true; do cansend can0 0C9#0080000000101000; sleep 0.002; done

ja tulemus on…

See selleks! Nüüd saate proovida spidomeetri, raadio, tulede, ukselukkude jms juhtimist sama lähenemisviisi abil.

Võimalikud probleemid

  • Kuigi CAN-siin on populaarseim võrk, pole see ainus võrk. Kui te ei leia CAN-siinilt otsitavat sõnumit, proovige mõnda muud võrku. Eriti mittekriitilised teated nagu raadio, tuled ja ukselukud asuvad tõenäoliselt teises võrgus.
  • Nagu mainitud, sõltuvad CAN-i kaudu edastatavad täpsed andmed auto margist, mudelist ja aastast. Mõni auto kasutab CAN-sõnumis loendurit, et sama sõnumit mitu korda ei töödelda. See on veidi keerulisem, kuid peaksite saama seda teha esitatud teabe abil. Mõnes autos kasutatakse andmete terviklikkuse tagamiseks ka kontrollsummat. Selle kontrollsumma arvutamine võib olla keeruline. Kui teil on Toyota, vaadake Adventures in Automotive Networks and Control Units, p10, Checksum-Toyota. Kõik peaksid tõesti kogu paberi läbi lugema.
  • Tuvastatud paketi taasesitamisel siinil võib teie CAN USB-seadmesse minna "buss välja" olekusse. See on osa CAN-standardist ja juhtub siis, kui seadmel on liiga palju vigu. See juhtub üldiselt siis, kui bussis on palju liiklust. Selle saavutamiseks võite mängida viivituste ja ajastusega. Võib-olla proovige sõnumit pärast auto lisavarustusrežiimi viimist uuesti mängida, proovige veidi oodata, proovige seda autoga sisse lülitada jne. Kui olete tuvastanud, mis on ECU-d bussiga ühendatud, saate ka nende kaitsme tõmmata, et takistada neil sõnumite saatmist ja vähendada bussi liiklust.

Peab lugema

  • Autohäkkerite käsiraamat
  • Charlie Milleri ja Chris Valaseki uuringud, jah, kõik
  • California ülikooli San Diego ja Washingtoni ülikooli uuringud.

Vaadake kindlasti ka avatud garaaže ja nende videoid.