Jak nabourat auto - rychlý nárazový kurz

Spoofed otáčkoměr, motor neběží.

Cílem tohoto článku je, jak začít s hackováním aut - rychle, levně a snadno. Za tímto účelem ukážeme jako příklad spoof RPM.

Toto není v žádném případě vyčerpávající kurz. Jejím cílem je poskytnout pouze tolik informací, které vás uvedou do provozu. Pokud chcete kopat hlouběji, můžete si na konci vyzkoušet povinné čtení.

Pokud se rozhodnete tento výukový program realizovat v reálném životě, budete potřebovat počítač se systémem Linux (nebo virtuální počítač se systémem Linux) a zařízení typu CAN-to-USB (na které se podíváme později).

Auto je síť

Auto se skládá z více počítačů pro řízení motoru, převodovky, oken, zámků, světel atd. Tyto počítače se nazývají elektronické řídicí jednotky (ECU) a vzájemně spolu komunikují v síti.

Například, když stisknete tlačítko na volantu pro zvýšení hlasitosti rádia, ECU na volantu vyšle příkaz ke zvýšení hlasitosti do sítě, ECU rádia pak tento příkaz uvidí a podle toho postupuje.

V automobilu je více sítí, zpravidla nejméně dvou:

  • Jeden pro kritická data, jako jsou zprávy o motorech a pohonných jednotkách
  • A jeden pro méně kritická data, jako jsou rádio a dveřní zámky

Kritická síť používá rychlý a spolehlivý protokol, zatímco nekritická síť používá pomalejší, méně spolehlivý, ale levnější protokol. Počet sítí a také to, které ECU jsou vzájemně propojeny, závisí na výrobě auta, modelu a roce. ECU může být také připojena k více sítím.

Připojení k síti

K některým sítím lze přistupovat přes port OBD-II. Systém OBD-II je povinný pro všechny osobní automobily a lehké nákladní automobily postavené v USA po roce 1996 a v Evropě po roce 2004.

Konektor je v dosahu paží ze sedadla řidiče. Možná budete muset zvednout plastový kryt, ale je vždy přístupný bez nářadí.

OBD-II konektor.

Standard OBD-II umožňuje pět signalizačních protokolů. Je na výrobci, aby rozhodl, který z nich použije. CAN je nejoblíbenější a budeme o ní diskutovat. Je přístupný přes piny 6 a 14 konektoru OBD-II. Pokud má vaše auto sběrnici CAN, uvidíte na kolících kovové vodiče jako na obrázku výše.

Sběrnice CAN je spolehlivá vysokorychlostní sběrnice, která se používá k odesílání důležitých dat. Bohužel datové pakety na sběrnici nejsou standardizované, takže je budete muset obrátit, abyste věděli, co znamenají. Standard OBD-II také ponechává prostor pro piny specifické pro dodavatele, které lze použít pro protokoly specifické pro dodavatele. To usnadňuje prodejci diagnostikovat problémy.

Na mém autě (GM) mám standardní sběrnici CAN na pinech 6 a 14 a jedinou drátovou sběrnici CAN na kolíku 1. Standardní sběrnice CAN je spolehlivý, vysokorychlostní protokol (500 kbps) také označovaný jako vysokorychlostní CAN (HS-CAN). Používá se pro kritická data. Jednovodičová sběrnice CAN (SW-CAN) nebo GMLAN je pomalejší (33,3 kbps) a méně spolehlivá, ale levnější, protože používá pouze jeden vodič. Tato sběrnice se používá pro nekritická data.

Pokud vidíte kód PIN specifický pro dodavatele a nevíte, který protokol se používá, Google „ OBD pinout“. K dispozici je také nízká rychlost CAN (LS-CAN) a střední rychlost CAN (MS-CAN). MS-CAN je obvykle na pinech 3 a 11 a běží na 125 kbps u automobilů Ford a Volvo.

Nástroje

K analýze dat budete potřebovat jak zařízení, které dokáže interpretovat data CAN, tak i software

Hardware

Abyste mohli přijímat a přenášet pakety CAN, potřebujete zařízení, které je toho schopno. Často se setkáte se zařízeními založenými na ELM327. I když mají tyto využití, jsou hrozně pro hackování. Jsou příliš pomalé na sledování sběrnice CAN.

Existují také špičková zařízení jako Kvaser, Peak nebo EMS Wünsche. Tyto práce zvládnou, ale jsou nadměrné a dost drahé.

Některá špičková zařízení také vyžadují, abyste si spolu s tím zakoupili software. USB2CAN je nativní rozhraní CAN pro Linux, které nabízí velkou hodnotu za peníze.

Můžete také použít Cantact nebo CANUSB. Nejedná se však o nativní zařízení CAN v systému Linux a používají protokol založený na ASCII. To znamená, že jsou o něco složitější a mají nižší výkon. Na druhé straně jsou dobře podporovány ve více operačních systémech.

Používám CANalyze, které jsem navrhl pro své potřeby. Je to podobné jako USB2CAN v tom, že se jedná o dostupné nativní rozhraní CAN, ale používá novější mikrořadič, je otevřený zdroj a lze jej vytvořit pomocí nástrojů s otevřeným zdrojovým kódem. Zbytek tohoto tutoriálu předpokládá, že používáte nativní rozhraní CAN.

Software

Chcete-li se zařízením komunikovat, musíte do počítače se systémem Linux nainstalovat balíček can-utils. To lze provést zadáním následujícího do příkazového řádku systému Linux:

sudo apt-get install can-utils

Can-utils usnadňuje odesílání, přijímání a analýzu paketů CAN. Toto jsou příkazy, které použijeme.

  • cansniffer zobrazí pouze pakety, které se mění
  • skládka všech přijatých paketů
  • cansend poslat paket

Linux má podporu jádra zabudovanou do jádra pomocí SocketCAN. To usnadňuje psaní vlastních doplňkových programů. Se sběrnicí CAN můžete komunikovat stejným způsobem jako s jakoukoli jinou sítí, tj. Prostřednictvím soketů.

CAN bus

Než začnete couvat, měli byste vědět, jak funguje sběrnice CAN. Skládá se ze 2 vodičů a používá diferenciální signalizaci. Protože se jedná o sběrnici, lze k těmto dvěma vodičům připojit více zařízení. Když je na sběrnici odeslán rámec CAN, je přijat všemi ECU, ale zpracovává se pouze v případě, že je to užitečné pro ECU. Pokud je odesíláno více rámců CAN současně, vyhrává ten, který má nejvyšší prioritu. Rám CAN má 3 části, které jsou pro nás relevantní.

  • arbitrážní identifikátor Identifikátor zprávy. ECU používá k rozhodnutí zpracovat nebo ignorovat přijatý rámec. Představuje také prioritu zprávy. Nižší číslo má vyšší prioritu. Takže například, pokud byste byli inženýři navrhující síť, dali byste rámu pro nasazení airbagů velmi vysokou prioritu nebo nízkou arbitrážní ID. Na druhou stranu byste dali datům určeným pro zámky dveří nižší prioritu nebo vyšší rozhodčí ID.
  • kód délky dat (DLC) Označuje délku datového pole v bajtech. Rámec CAN může obsahovat maximálně 8 bajtů dat.
  • datové pole Obsahuje až 8 bajtů dat.

Obrácení sběrnice CAN

Obecný přístup k obrácení sběrnice CAN je generovat chování, které chcete napodobit, a najít zprávu, která toto chování způsobuje. Například řekněme, že asistenční systém udržování jízdního pruhu (LKAS) na vašem autě je svinstvo a vy jste si vytvořili svůj vlastní.

Abyste mohli ovládat řízení, musíte vědět, jaké zprávy je třeba poslat. Způsob, jak to zjistit, je zapnout původní LKAS, sledovat sběrnici CAN a identifikovat pakety odpovědné za otáčení volantu. Jakmile tyto pakety identifikujete, můžete nechat své vlastní LKAS poslat tyto pakety na sběrnici CAN pro ovládání volantu.

V našem případě chceme zkazit otáčkoměry, takže musíme změnit otáčky otáčením na plyn při zapnutém a neutrálním vozidle a pak se pokusíme najít paket odpovědný za změnu otáček.

Založit

Připojte zařízení CAN k portu OBD-II a USB portu počítače. Vyvolejte rozhraní CAN spuštěním následujícího příkazu v Linuxu:

sudo ip link set can0 up type může bitrate 500000

který vyvolá rozhraní can0 (vždy can0, pokud máte připojeno pouze jedno zařízení) při bitové rychlosti 500 kbps, což je standardní.

Identifikovat

Když je vozidlo vypnuté, ECU obvykle spí, takže musíte zapnout auto nebo jej uvést do režimu příslušenství. Nezpracovaná data CAN se můžete podívat spuštěním této výzvy v systému Linux:

svícen can0

Toto vytiskne data CAN na obrazovku, jakmile jsou přijata. To je však velmi neorganizované a je velmi obtížné zjistit, jaké pakety odpovídají určité události. Program můžete zastavit stisknutím kláves ctrl + c. Aby byla data čitelnější, používáme cansniffer, která seskupuje pakety podle arbitrážního ID a zobrazuje pouze pakety, které se mění. Chcete-li jej spustit, spusťte příkaz v příkazovém řádku systému Linux:

cansniffer -c can0

kde -c zbarvuje měnící se bajty a can0 je rozhraní, které se čichá. Odstranění konstantních paketů trvá několik sekund.

Měli byste vidět něco podobného obrázku níže, i když čísla budou pravděpodobně úplně jiná.

Cansniffer s volnoběhem motoru.

První sloupec (delta) ukazuje rychlost v sekundách, při které jsou přijímány pakety s tímto rozhodčím ID. Druhý sloupec (ID) obsahuje rozhodčí ID. Zbývající alfanumerické sloupce (data…) obsahují datové bajty. Pokud mají data reprezentaci ASCII, lze je vidět vpravo, jinak je to tečka.

Pokud při spuštěném motoru šlápnete na plyn, aby se zvýšily otáčky, mohou se na obrazovce objevit nové zprávy CAN a / nebo stávající.

Musíme najít zprávu CAN, kde měnící se bajty korelují se změnou RPM. Pravděpodobně lze očekávat, že hodnota se bude zvyšovat / snižovat se zvyšováním / snižováním RPM.

Prvním rámcem CAN v cansnifferu, který se zřejmě liší s RPM, je rámec s arbitrážním id C9. Pravděpodobně existuje více potenciálních paketů, které se liší s RPM, to je jen první.

Zjištěný paket koreluje s RPM.

V této zprávě se mění 4 bajty (zbarvené červeně), ale ne všechny z nich nutně označují RPM. Zdá se, že variace ve třetím bajte 07 nesouvisejí s různými RPM. Poslední bajt 1B ano.

Jakmile však sundáme nohu z plynového pedálu, jde to na 00. To by naznačovalo, že představuje polohu škrticí klapky, nikoli RPM.

Konečně existují dva bajty 21 C0, které zřejmě odpovídají změně RPM. Konkrétněji se mění jako 16 bajtové celé číslo, tj. Když přeteče druhý bajt C0, první bajt 21 se zvětšuje o jeden. Také se zdá, že 21 odpovídá zhruba 2 000 ot / min. Je dobré poznamenat si, kdy zprávu přehrajete.

Přehrát

Jakmile máte kandidáta, odešlete jej na sběrnici CAN pomocí následujícího příkazu v příkazovém řádku systému Linux:

cansend can0 0C9 # 8021C0071B101000

kde rámec má formát # {data} a musí být nahrazen vaší vlastní zprávou CAN.

Vaše auto může být spuštěno nebo v režimu příslušenství. Nezapomeňte použít paket, který jste získali, když byl motor nečinný, jinak neuvidíte při výměně, když je motor nečinný, nic jiného.

Pokud paket pošlete pouze jednou, pravděpodobně se na sdruženém panelu přístrojů nic neobjeví. Je to proto, že původní zpráva je stále odesílána nepřetržitě na sběrnici v intervalu 0,2 sekundy ECU, takže vaše zpráva bude ignorována.

Připomeňme, že sazba je uvedena v prvním sloupci cansniffer. Existují dva způsoby, jak to obejít kromě odpojení ECU, která tyto zprávy generuje. Jednou z možností je odesílání paketů na mnohem vyšší frekvenci, než jsou právě odesílané pakety. Můžete to provést spuštěním následujícího příkazu v Linuxu:

zatímco pravdivý; do cansend can0 0C9 # 8021C0071B101000; spánek 0,002; Hotovo

a nahrazení zprávy CAN tím, který jste identifikovali. Stisknutím ctrl + c zastavte.

Další možností je sledování sběrnice a pokaždé, když zjistíte paket, který chcete spoof, poslat svůj vlastní paket ihned poté. To lze provést spuštěním v řádku systému Linux:

svícen can0 | grep "0C9" | při čtení řádku; do cansend can0 0C9 # 8021C0071B101000; Hotovo

kde musíte nahradit zprávu CAN a 0C9 zprávou CAN, kterou jste identifikovali, a je to arbitrážní ID. Můžete experimentovat s oběma přístupy a zjistit, který z nich funguje lépe.

Pokud se otáčkoměr změní, dobrá práce, našli jste to! Pokud ne, určete další zprávu, která souvisí s RPM a přehrajte ji.

Fuzzing

Nyní, když máte na přístrojové desce rámec CAN, který nastavuje RPM, můžete hrát s daty, která posíláte, abyste viděli, co se stane. Všimli jsme si, že dva bajty, které odpovídají RPM, se chovají jako 16bitové celé číslo, takže pro nastavení otáčkoměru na 8 k RPM spustíme ve vaší linuxové výzvě následující:

zatímco pravdivý; do cansend can0 0C9 # 0080000000101000; spánek 0,002; Hotovo

a výsledkem je…

Spoofed RPM s vypnutým motorem.

A je to! Nyní můžete vyzkoušet ovládání tachometru, rádia, světel, dveřních zámků atd. Pomocí stejného přístupu.

Možné problémy

  • Zatímco sběrnice CAN je nejoblíbenější sítí, není to jediná síť. Pokud na sběrnici CAN nenaleznete hledanou zprávu, zkuste jinou síť. Zejména nekritické zprávy, jako jsou rádio, světla a dveřní zámky, budou pravděpodobně v jiné síti.
  • Jak již bylo uvedeno, přesná data přenášená přes CAN závisí na značce, modelu a roce vozidla. Některá auta používají ve zprávě CAN čítač, aby zajistila, že stejná zpráva nebude zpracována vícekrát. To je o něco obtížnější, ale měli byste být schopni to udělat s poskytnutými informacemi. Některá auta také používají kontrolní součet k zajištění integrity dat. Výpočet tohoto kontrolního součtu může být obtížný. Pokud máte Toyota, podívejte se na Adventures in Automotive Networks and Control Unit, str. 10, Checksum-Toyota. Každý by si měl celý dokument přečíst.
  • Při výměně identifikovaného paketu na sběrnici může zařízení CAN na USB přejít do stavu „bus off“. Toto je část standardu CAN a stává se, když zařízení zaznamenalo příliš mnoho chyb. K tomu obvykle dochází, když je v autobuse hodně provozu. Chcete-li to obejít, můžete hrát se zpožděním a načasováním, možná zkuste zprávu vyměnit okamžitě po uvedení vozu do režimu příslušenství, zkuste chvíli počkat, zkuste to s zapnutým autem atd. Pokud jste zjistili, jaké ECU jsou připojené k sběrnici, můžete také vytáhnout jejich pojistku, abyste jim zabránili v odesílání zpráv a snižovali provoz na sběrnici.

Musí číst

  • Příručka k autoservisu
  • Výzkum Charlie Millera a Chrisa Valaska, ano, všechno
  • Výzkum University of California v San Diegu a University of Washington.

Nezapomeňte také zkontrolovat otevřené garáže a jejich videa.