Güvenlik Açıkları

Tesla Model S’de Bulunan Wi-Fi Güvenlik Açıklarının İstismarı

Reklam

Tesla Model S’de Bulunan Wi-Fi Güvenlik Açıklarının İstismarı

Son iki yılda, Tencent Cohen Labs Tesla otomobillerinin güvenliği konusunda derinlemesine araştırmalar yaptı ve araştırma sonuçlarını Black Hat 2017 ve Black Hat 2018 güvenlik konferanslarında iki kez kamuoyunda paylaştı. Araştırma sonuçları otomotiv sistemlerinin çok sayıda bileşenini kapsamaktadır. Tesla‘nın CID, IC, ağ geçidi ve otonom sürüş modüllerine nasıl girileceğini gösterdik. Bu işlem, çekirdek, tarayıcı, MCU ürün yazılımı, UDS protokolü ve OTA güncelleme işlemindeki çoklu güvenlik açıklarından yararlanır. Son zamanlarda otonom sürüş modülü üzerinde bazı ilginç çalışmalar yapıldığını belirtmek gerekir. Otomatik silecek ve şerit tanıma işlevlerinin özel uygulama ayrıntıları analiz edildi ve gerçek dünyadaki kusurları düzenlemeye çalıştık.

Tesla‘nın araç içi sisteminin güvenliğini daha iyi anlamak için kablosuz işlev modülünü (Model S’deki Parrot modülü) inceledik ve içinde iki güvenlik açığı bulundu. Biri kablosuz çip ürün yazılımında, diğeri kablosuz çip sürücüsünde. Bu iki güvenlik açığını birleştirerek, bir saldırgan Parrot modülünün Linux sisteminde rasgele komutlar çalıştırabilir.

Bu makale, bu iki güvenlik açığının ayrıntılarını ortaya çıkaracak ve bu güvenlik açıklarının sömürü sürecini, bu iki güvenlik açığının Tesla’nın araç sistemine kablosuz protokoller aracılığıyla uzaktan nüfuz etmek için kullanılabileceğini kanıtlamak için tanıtacaktır.

 

Papağan modülü

Tesla Model S’deki Parrot modülü, kablosuz ve Bluetooth işlevlerini entegre eden üçüncü taraf bir model olan FC6050W modelidir. Papağan CID’ye USB protokolü üzerinden bağlanır. Parrot bir Linux sistemi çalıştırır ve bir USB Ethernet aygıtı kullanır, bu nedenle Parrot ve CID, USB protokolüne dayanan bir Ethernet bağlantısı uygular. Tesla Model S bir kablosuz ağa bağlandığında, Parrot modülü aslında kablosuz ağa bağlanır. Bu noktada, ağ trafiği Parrot tarafından CID’den harici ağa yönlendirilir.

Parrot modülünün pim tanımı da bu veri sayfasındadır. Linux sisteminin kabuğu Debug UART pininden elde edilebilir.

Sıfırlama pimi CID’nin GPIO’suna bağlanır, bu nedenle CID, aşağıdaki komutla Parrot modülünün tamamını sıfırlama yeteneğine sahiptir.

Marvell kablosuz çip

Marvell 88W8688, IEEE802.11a / g / bMAC / Baseband / RF set kablosuz ve Bluetooth’u destekleyen düşük maliyetli, düşük güçlü, yüksek düzeyde entegre bir temel bant / RF sistem düzeyi çiptir.

Marvell’in resmi web sitesi çip tasarımının blok şemasını sunmaktadır.

Marvell 88W8688, gömülü yüksek performanslı Marvell Ferocean ARM9 işlemci içerir. Ürün yazılımını değiştirerek Ana Kimlik kaydında 0x11101556 değerini elde ettik ve 88W8688 tarafından kullanılan işlemci modelinin Feroceon 88FR101 rev 1 olabileceği sonucuna varıldı. Parrot modülünde, Marvell 88w8688 yongası ana sisteme SDIO arabirimi üzerinden bağlanır.

 

Chip ürün yazılımı

Yazılım indirme işlemi iki aşamadan oluşur. İlk olarak, “sd8688_helper.bin” yardımcı ürün yazılımını indirin ve sonra “sd8688.bin” ana ürün yazılımını indirin. Yardımcı bellenim ana bellenimi indirir ve ana bellenimdeki her veri bloğunun doğru olduğunu doğrular. Ana ürün yazılımı birçok veri bloğu içerir.Her bloğun yapısı aşağıdaki gibi tanımlanır.

+ struct fw_chunk { int chunk_type; int addr; unsigned int length; unsigned int crc32; unsigned char [1];} __packed;

88w8688 ürün yazılımı, çoğunlukla gömülü aygıtlar için kullanılan ThreadX gerçek zamanlı işletim sistemini temel alarak çalışır. ThreadX kodu ROM bellek alanında bulunmaktadır, bu nedenle “sd8688.bin” bellenimi aslında ThreadX’in bir uygulaması olarak çalışır.

Tesla‘da “sd8688.bin” donanım yazılımının sürüm kimliği “sd8688-B1, RF868X, FP44, 13.44.1.p49” dur ve bu makaledeki tüm araştırmalar bu sürüme dayanmaktadır.

Tüm ThreadX API’lerini tersten belirledikten sonra, her görevin bilgileri elde edilebilir.

 

Günlüğe kaydetme ve hata ayıklama

 

Yonga bellenimi, Veri Durdurma, Ön Alma Durdurma, Belirsiz ve SWI gibi CPU istisna vektörlerinin işlenmesini uygulamaz. Bu, işlemcinin bir ürün yazılımı çökmesinden sonra çalışmayı durduracağı anlamına gelir. Ürün yazılımının nerede ve neden çöktüğünü bilmiyoruz.

Bu yüzden ürün yazılımını değiştirdik ve bu istisna işleme prosedürlerini kendimiz uyguladık. Bu işlemler, genel amaçlı kayıtlar, durum kayıtları ve sistem modunda ve kesme modunda bağlantı kayıtları dahil olmak üzere ürün yazılımı çöktüğünde bazı kayıt bilgilerini kaydeder. Bu şekilde, çökme anında sistem modunda veya kesme modunda bazı kayıt bilgilerini bilebiliriz.

Bu kayıt bilgilerini 0x52100 ~ 0x5FFFF gibi kullanılmayan bellek alanına yazarız. Bu şekilde, çip sıfırlandıktan sonra bu bilgiler okunabilir.

Undefine kural dışı durum işleme sürecini uyguladıktan ve bazı talimatları tanımsız talimatlar olarak değiştirdikten sonra, bellenim çalışırken kayıtların içeriğini alabilir veya ayarlayabiliriz. Bu şekilde, bellenimde hata ayıklayabiliriz.

Yeni bellenimi çipe indirin ve çalıştırın. HostCmd_CMD_SOFT_RESET komutunu çekirdek sürücüsündeki çipe gönderebilirsiniz. Ardından çip sıfırlanacak ve yeni bellenim indirilecektir.

 

Bellenimdeki güvenlik açıkları

88w8688 yongası, 802.11e WMM (Wi-Fi Multimedya) protokolünü destekler. Bu protokolde, STA, Eylem çerçeveleri aracılığıyla diğer cihazlara bir ADDTS isteği gönderir. İstek TSPEC bilgilerini içerir. Ardından diğer cihazlar da Eylem çerçevesi üzerinden ADDTS yanıtı döndürür. Aşağıdakiler, Eylem çerçevesinin özel biçimidir.

ADDTS işleminin tamamı aşağıdaki gibidir: Sistem bir ADDTS isteği göndermek istediğinde, çekirdek sürücüsü çipe bir HostCmd_CMD_WMM_ADDTS_REQ komutu gönderir ve ardından çip ADDTS isteğini kablosuz iletişim kuralı yoluyla gönderir. Yonga ADDTS yanıtı aldığında, yanıt bilgileri Eylem çerçeve başlığından kaldırılır ve HostCmd_CMD_WMM_ADDTS_REQ yapısına kopyalanır ve ADDTS_REQ komutunun sonucu olarak HostCmd_DS_COMMAND yapısındaki çekirdek sürücüsüne geri döner. Çekirdek sürücüsü aslında ADDTS yanıtını işler.

+ struct _HostCmd_DS_COMMAND {u16 Komut; u16 Boyut; u16 SeqNum; u16 Sonuç; sendika {HostCmd_DS_GET_HW_SPEC hwspec; HostCmd_CMD_WMM_ADDTS_REQ; // …….}}

Güvenlik açığı, ADDTS yanıtını HostCmd_CMD_WMM_ADDTS_REQ yapısına kopyalama sürecinde bulunmaktadır. Wlan_handle_WMM_ADDTS_response işlevini kopyalarken, kopyanın uzunluğu, Eylem çerçevesinin uzunluğu ile 4 baytlık Eylem çerçevesi üstbilgisi arasında olmalıdır. Eylem çerçevesinin yalnızca bir başlığı varsa ve uzunluğu 3 ise. Ardından kopyanın uzunluğu 0xffffffff olur. Bu şekilde, bellek tamamen yok edilecek ve istikrarlı bir çökmeye neden olacaktır.

Sürücüdeki güvenlik açığı

Yonga ve sürücü arasında, SDIO arabiriminden geçen üç tür veri paketi vardır: MV_TYPE_DATA, MV_TYPE_CMD ve MV_TYPE_EVENT. Tanımı kaynak kodunda bulunabilir.

Komut işleme süreci kabaca aşağıdaki gibidir. Sürücü, ck5050 ve wpa_supplicant gibi kullanıcı modu programlarından talimatlar alır ve wlan_prepare_cmd () fonksiyonundaki HostCmd_DS_COMMAND yapısını başlatır. Wda_process_cmdresp () fonksiyonunun son parametresi, çip tarafından döndürülen sonuçların işlenmesinden sorumludur. Ayrıca ilgili bilgileri pdata_buf’un işaret ettiği yapıya kopyalayın.

HostCmd_DS_COMMAND yapısındaki üye boyutunun boyutunun geçerli olup olmadığını kontrol etmez. Bu nedenle, HostCmd_DS_COMMAND yapısındaki veriler başka bir konuma kopyalanırken bellek taşması oluştu.

Çip üzerinde kod yürütme
Açıkçası, bellenimdeki güvenlik açığı bir yığın taşmasıdır. Bu güvenlik açığını çip üzerinde kod yürütme uygulamak için kullanmak için, memcpy () işlevinin belleği nasıl tahrip ettiğini, çipin nasıl çöktüğünü ve nerede çöktüğünü bilmemiz gerekir.

Bu güvenlik açığını tetiklemek için, eylem çerçevesi üstbilgisinin uzunluğu 4’ten az olmalıdır. Aynı zamanda, Eylem karesinde doğru iletişim kutusu belirtecini sağlamamız gerekir; bu, memcpy () tarafından alınan uzunluğun yalnızca 0xffffffff olabileceği anlamına gelir. Bellek bloğu pool_start_id_rmlmebuf bellek havuzundan ayrıldığı ve bu bellek havuzunda yalnızca bir bellek bloğu bulunduğundan kaynak adresi sabittir. Hedef adres pool_start_id_tx bellek havuzundan ayrılır, bu nedenle hedef adres dört adresten biri olabilir.

Kaynak ve hedef adresler 0xC0000000 ~ 0xC003FFFF RAM bellek alanında bulunur, ancak 0xC0000000 – 0xCFFFFFFF bellek adreslerinin tümü yasaldır. Sonuç olarak, bu bellek alanlarını okumak veya yazmak tam olarak aynı etkiye sahip olacaktır.

0xC0000000 – 0xCFFFFFFF bellek alanları hem okunabilir hem de yazılabilir olduğundan, kopyalama işlemi belleğin sınırlarına zorlukla vurur. 0x40000 bayt kopyalandıktan sonra, tüm bellek bir kısmı üzerine yazılan ve kaybolan bütün bir vardiya olarak düşünülebilir.

88w8688’deki CPU tek çekirdektir, bu nedenle bir kesme gerçekleşinceye kadar çip kopyalama işlemi sırasında çökmez. Bellek şu anda bozuk olduğundan, çoğu durumda, yonga kesme sırasında çöker.

Kesme kontrolörü, kesme sistemine bir arayüz sağlar. Bir kesinti meydana geldiğinde, bellenim, kesinti olay türünü kayıttan alabilir ve ilgili kesinti işleme prosedürünü çağırabilir.

Birçok kesme kaynağı vardır, bu nedenle güvenlik açığı tetiklendikten sonra, çip birden fazla yerde çökebilir.

Bir olasılık, kesme 0x15’in işlenmesi sırasında 0x26580 fonksiyonunun çağrılmasıdır. 0xC000CC08 bağlantılı bir liste işaretçisi, bu işaretçi güvenlik açığı tetiklendikten sonra kurcalanabilir. Ancak, bu bağlantılı listenin çalışması kod yürütme elde etmek için fırsat vermek zordur.

Başka bir kilitlenme konumu saat kesintisinin işlenmesidir. İşleme işlemi bazen iş parçacıklarını değiştirir.Bu sırada diğer görevler uyanır ve çoğaltma işlemi askıya alınır. Diğer görevler çalışmaya devam ettikten sonra yonga çökebilir. Bu durumda, ürün yazılımı genellikle 0x4D75C işlevinde kilitlenir.

Bu işlev, TX_SEMAPHORE yapısını gösteren bir 0xC000D7DC işaretçisi okuyacaktır. Güvenlik açığı tetiklendikten sonra, sahte bir TX_SEMAPHORE yapısına işaret etmek için bu işaretçiyi geçersiz kılabiliriz.

Typedef yapı TX_SEMAPHORE_STRUCT {ULONG tx_semaphore_id; CHAR_PTR tx_semaphore_name; ULONG tx_semaphore_count, yapı TX_THREAD_STRUCT * tx_semaphore_suspension_list; ULONG tx_semaphore_suspended_count, yapı TX_SEMAPHORE_STRUCT * tx_semaphore_created_next, yapı TX_SEMAPHORE_STRUCT * tx_semaphore_created_previous;} TX_SEMAPHORE;

Sahte TX_SEMAPHORE yapısındaki tx_semaphore_suspension_lis işaretçisi yalnızca sahte TX_THREAD_STRUCT yapısını gösterir. Daha sonrasında TX_THREAD_STRUCT yapısındaki bağlantılı listeyi güncellediğinde, herhangi bir adrese yazma şansımız olabilir.

ITCM bellek alanı RWX olduğundan, “BL os_semaphore_put” komutunun bir sonraki komutunu rasgele kod yürütme uygulamak için bir atlama komutuyla doğrudan değiştirebiliriz. Zorluk, aynı anda bellekte iki yapı TX_SEMAPHORE ve TX_THREAD_STRUCT püskürtmeli ve ayrıca tx_semaphore_suspension_list işaretçisinin TX_THREAD_STRUCT yapısını gösterdiğinden emin olmamızdır. Bu koşullar karşılanabilir, ancak kullanım başarı oranı çok düşük olacaktır.

Biz esas olarak MCU kesme işlemi sırasında üçüncü kilitlenme konumuna odaklanıyoruz. G_interface_sdio struct_interface yapısının işaretçisi üzerine yazılacaktır.

struct struct_interface {int field_0; struct struct_interface * sonraki; char * name_ptr; int sdio_idx; int fun_enable; int funE; int funD; int funD; int funA; int funB; // 0x24 int funG; int field_2C;};

Yapı içinde funB fonksiyon ibresi kullanılır. G_interface_sdio kurcalanırsa, kod yürütme doğrudan uygulanır.

Bu, interface_call_funB () işlevindeki “BX R3” komutu 0x3CD4E adresinde yürütüldüğünde bir kayıt günlüğü iletisidir. Bu noktada, g_interface_sdio’nun üzerine 0xabcd1211 yazılır.

LOG_BP_M0_CPSR       :  0xa000009b LOG_BP_M0_SP         :  0x5fec8 LOG_BP_M0_LR         :  0x3cd50 LOG_BP_M0_SPSP       :  0xa00000b2 LOG_BP_M1_CPSR       :  0xa0000092 LOG_BP_M1_SP         :  0x5536c LOG_BP_M1_LR         :  0x4e3d5 LOG_BP_M1_SPSP       :  0xa0000013 LOG_BP_M2_CPSR       :  0 LOG_BP_M2_SP         :  0x58cb8 LOG_BP_M2_LR         :  0x40082e8 LOG_BP_M2_SPSP       :  0 LOG_BP_R1            :  0x1c LOG_BP_R2            :  0 LOG_BP_R3           :  0xefdeadbe LOG_BP_R4            :  0x40c0800 LOG_BP_R5            :  0 LOG_BP_R6            :  0x8000a500 LOG_BP_R7            :  0x8000a540 LOG_BP_R8            :  0x140 LOG_BP_R9            :  0x58cb0 LOG_BP_R10           :  0x40082e8 LOG_BP_FP            :  0 LOG_BP_IP            :  0x8c223fa3 LOG_BP_R0            :  0xabcd1211

İnterface_call_funB () işlevi, 0x4E3D0 adresindeki MCU kesinti işlemi tarafından kullanılır.

Kopyanın kaynak adresi 0xC0040000’e ulaştığında, tüm bellek bir ofset olarak kabul edilebilir. Kopyanın kaynak adresi 0xC0080000’e ulaştığında, tüm bellek iki kez dengelendi. Her bir ofsetin mesafesi aşağıdaki gibidir.

0xC0016478-0xC000DC9B = 0x87DD0xC0016478-0xC000E49B = 0x7FDD0xC0016478-0xC000EC9B = 0x77DD0xC0016478-0xC000F49B = 0x6FDD

Çoğu durumda, bu tür bir bellek kayması, güvenlik açığı tetiklendikten sonra bir kesme üretildiğinde 3 ila 5 kez oluşur. Bu yüzden g_interface_sdio işaretçisinin üzerine aşağıdaki adresteki veriler yazılır.

0xC000B818 + 0x87DD * 1 = 0xC0013FF50xC000B818 + 0x87DD * 2 = 0xC001C7D20xC000B818 + 0x87DD * 3 = 0xC0024FAF0xC000B818 + 0x87DD * 4 = 0xC002D78C ... 0xC000B818 + 0x7FDD * 1 = 0xC00137F50xC000B818 + 0x7FDD * 2 = 0xC001B7D20xC000B818 + 0x7FDD * 3 = 0xC00237AF0xC000B818 + 0x7FDD * 4 = 0xC004B700 ... 0xC000B818 + 0x77DD * 1 = 0xC0012FF50xC000B818 + 0x77DD * 2 = 0xC001A7D20xC000B818 + 0x77DD * 3 = 0xC0021FAF0xC000B818 + 0x77DD * 4 = 0xC002978C ... 0xC000B818 + 0x6FDD * 1 = 0xC00127F50xC000B818 + 0x6FDD * 2 = 0xC00197D20xC000B818 + 0x6FDD * 3 = 0xC00207AF0xC000B818 + 0x6FDD * 4 = 0xC002778C ...

0xC0024FAF, 0xC00237AF ve 0xC0021FAF adresleri, büyük bir DMA tamponu 0xC0021F90 ~ 0xC0025790’da bulunur. Bu DMA arabelleği, kablosuz çip tarafından alınan 802.11 veri çerçevelerini saklamak için kullanılır. Dolayısıyla bu DMA tamponu sahte göstergeleri saklamak için kullanılabilir.

Sahte işaretçileri biriktirmek için, çipe sahte işaretçilerle dolu birçok normal 802.11 veri çerçevesi gönderebiliriz. DMA tamponu çok büyük olduğundan, kabuk kodu doğrudan veri çerçevesine de yerleştirilebilir. Sömürünün başarı oranını artırmak için, yumurtadaki gerçek kabuk kodunu bulmak için Egg Hunter’ı kullandık.

G_interface_sdio’nun üzerine başarıyla yazılırsa. Kabuk kodu veya yumurta avcısı 0xC000B818’e çok yakın olacaktır. Kullandığımız sahte işaretçi 0x41954 çünkü 0x41954 + 0x24 adresinde 0xC000B991 işaretçisi var. Bu şekilde, $ PC’yi 0xC000B991’e kaçırabiliriz. Aynı zamanda, işaretçi 0x41954 normal bir talimat olarak yürütülebilir.

54 19 ADDS R4, R2, R504 00 MOVS R4, R0

Bu yöntemin kod yürütme için% 25 başarı oranı vardır.

Saldırı ana bilgisayar sistemi

Çekirdek sürücüsündeki güvenlik açıkları, ana sisteme yonga gönderme komut paketleri tarafından tetiklenebilir. HostCmd_CMD_GET_MEM komutu genellikle wlan_get_firmware_mem () işlevi tarafından başlatılır.

Bu durumda, pdata_buf ile gösterilen tampon kmalloc () ile tahsis edilir, bu nedenle bu, çekirdek yığını taşmasıdır. Gerçek ortamda, wlan_get_firmware_mem () işlevi kullanılmaz ve yığın taşması kullanımı daha karmaşıktır.

Ancak, güvenliği ihlal edilmiş bir yonga, komutun sonucunu döndürdüğünde komut kimliğini değiştirebilir. Bu nedenle, güvenlik açığı birçok komutun işlenmesi sırasında tetiklenebilir. Şu anda, pdata_buf tarafından gösterilen konuma göre, güvenlik açığı bir yığın taşması veya bir yığın taşması olabilir. Enable yerel değişkeninin adresini pdata_buf olarak alan wlan_enable_11d () fonksiyonunu bulduk. Böylece yığın taşmasını tetikleyebiliriz.

Wlan_enable_11d () işlevi wlan_11h_process_join () tarafından çağrılır. Açık bir şekilde AP ile bağlantı sırasında HostCmd_CMD_802_11_SNMP_MIB kullanılacaktır. Bellenimdeki güvenlik açığı yalnızca Parrot AP’ye katıldıktan sonra kullanılabilir. Wlan_enable_11d () içinde bir yığın taşmasını tetiklemek için çipin çekirdek sürücü çipini AP’nin bağlantısını kesmesi için kandırması gerekir. Ardından sürücü, HostCmd_CMD_802_11_SNMP_MIB’nin çipe gönderileceği bir yeniden bağlantı başlatır. Bu nedenle, yeniden bağlanma işlemini tetiklemek için çipin sürücüye EVENT_DISASSOCIATED olayı göndermesi gerekir.

Yongada bir güvenlik açığı tetiklendiğinde ve kod yürütüldüğünde yonga artık düzgün çalışmayabilir. Bu nedenle kabuk kodumuzun yeniden bağlanma işlemi sırasında bir dizi komutu işlemesi ve karşılık gelen sonuçları döndürmesi gerekir. HostCmd_CMD_802_11_SNMP_MIB komutu gelmeden önce, sonuçları döndürmek için yapılandırmamız gereken tek komut HostCmd_CMD_802_11_SCAN idi. Bir çekirdek güvenlik açığını tetiklemek için tüm bağlantı kesme işlemi aşağıdadır.

SDIO arabirimindeki olay ve komut veri paketlerinin gönderilmesi doğrudan SDIO_CardStatus ve SDIO_SQReadBaseAddress0 işlem kayıtları aracılığıyla yapılabilir. Çekirdek tarafından SDIO arabiriminde gönderilen veriler SDIO_SQWriteBaseAddress0 kaydı aracılığıyla elde edilebilir.

Linux sistemlerinde komut yürütme

Parrot’un Linux çekirdeği 2.6.36, NX’i desteklemediğinden, kabuk kodu doğrudan yığın üzerinde yürütülebilir. Aynı zamanda, HostCmd_DS_COMMAND yapısındaki boyut u16 tipindedir, bu nedenle kabuk kodu birçok şey yapmak için yeterince büyük olabilir.

Tetik kontrol yığın taşması ve PCodaha sonra,R7 sadece çekirdek yığınını gösterir, böylece kabuk kodu kolayca yürütülebilir.

Shell kodundaki run_linux_cmd işlevi, Linux komutlarını yürütmek için Usermode Helper API’sini çağırır.

Kabuğu uzaktan alın

Güvenlik açığı tetiklendikten sonra, yongadaki bellek tamamen yok edildi ve normal şekilde çalışmaya devam edemedi. Aynı zamanda, çekirdek yığını zarar görür ve düzgün çalışamaz.

Parrot’un kablosuz işlevinin tekrar çalışmasını sağlamak için aşağıdakileri yaptık:

1. Yükü çekirdeğe gönderdikten sonra, çipi aşağıdaki komutla sıfırlarız. Bundan sonra, çekirdek sürücüsü çipi yeniden keşfedecek ve ürün yazılımını tekrar indirecektir.

* (işaretsiz int *) 0x8000201c | = 2; * (işaretsiz int *) 0x8000a514 = 0; * (işaretsiz int *) 0x80003034 = 1;

2. fun_ret () kabuk kod işlevinde, rtnl_mutex kilidini açmak için rtnl_unlock () çekirdek işlevini çağırın. Aksi takdirde, Linux’un kablosuz işlevi düzgün çalışmaz ve Parrot CID tarafından yeniden başlatılır.

3. fun_ret () kabuk kodunda, wpa_supplicant kullanıcı modu işlemini sonlandırmak ve tekrar çalıştırmak için do_exit () öğesini çağırın, böylece çekirdek yığınını onarmaya gerek yoktur.

4. ck5050 işlemini öldürün ve tekrar çalıştırın, aksi takdirde ck5050 daha sonra yonga sıfırlaması nedeniyle çökerek Parrot’un CID tarafından yeniden başlatılmasına neden olur.

Kabuğu uzaktan almak için Parrot’u kendi AP’mize bağlanmaya ve iptables kurallarını değiştirmeye zorladık. Daha sonra Parrot’un kabuğuna 23 numaralı bağlantı noktasından erişilebilir.

Mermi elde etmenin başarı oranı yaklaşık% 10’dur.

Tam kullanım süreci

  1. Saldırgan, yakındaki tüm AP’lere bir DEAUTH çerçevesi gönderir.
  2. Tesla AP’ye yeniden bağlandığında, bir saldırgan Tesla’nın MAC adresini koklayabilir.
  3. Sahte işaretçileri yığınlayın ve ardından bellenimdeki güvenlik açıklarını tetiklemek için Eylem çerçeveleri gönderin.
  4. Memcpy () işlevi bir kesinti gerçekleşene kadar çalışır.
  5. Çip içinde rasgele kod başarıyla yürütüldü.
  6. İlk aşama shellcode EVENT_DISASSOCIATED olayını sürücüye gönderir.
  7. İlk aşama shellcode bir dizi komutu işler ve HostCmd_CMD_802_11_SNMP_MIB komutunu bekler.
  8. İlk aşamada, shellcode çekirdek yığını taşmasını tetiklemek için SDIO arabirimi üzerinden bir yük gönderir.
  9. İkinci aşama shellcode, call_usermodehelper () işlevini yürütür ve çağırır.
  10. Linux sistem komutlarını başarıyla uyguladı ve Parrot’un kablosuz özelliklerini onarmaya çalıştı.
  11. Saldırganlar kendi AP erişim noktalarını ve DHCP sunucularını kurdular.
  12. Linux komutlarını kullanarak Parrot’u saldırganlar tarafından kurulan AP etkin noktalarına katılmaya ve iptables kurallarını değiştirmeye zorlayın.
  13. Bir saldırgan Parrot’un kabuğunu Parrot’un 23 numaralı portundan alabilir.

Sorumlu güvenlik açığı açıklaması

Bu makalede bahsedilen iki güvenlik açığı Mart 2019’da Tesla’ya bildirilmiştir ve Tesla bu güvenlik açığını 2019.36.2 sürümünde gidermiştir. Aynı zamanda Marvell bu güvenlik açığını giderdi ve güvenlik açığı için bir güvenlik bülteni yayınladı . Güvenlik açığı araştırma raporunun açıklanması Tesla ile önceden onaylanmıştır ve Tesla sürümümüzün farkındadır.

Daha fazla içeriğe ulaşmak için Güvenlik Açıkları 
Etiketler
Daha Fazla Göster

İlgili Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir