[Güncelleme: İkinci Güvenlik Açığı Düzeltildi] OnePlus 3/3T Bootloader'da İki Kritik Güvenlik Kusuru Keşfedildi, Biri Yamalandı, Diğeri Giderildi

OnePlus 3 ve OnePlus 3T için önyükleyiciyle ilgili iki kusur keşfedildi. Birine yama uygulandı, diğerinin tedavisi sürüyor.

Bu makalenin yayınlanmasından bu yana, Oxygen OS sürüm 4.0.3, bu makalede tartışılan ikinci güvenlik açığını, yani dm-verity'yi yamaladı.

Android rootlamanın, özel ROM'ların, çekirdeklerin ve diğer değişikliklerin harika dünyasına girmeden önce, öncelikle cihazınızdaki önyükleyicinin kilidini açmanız gerekir.

Bazı cihazlarda (özellikle taşıyıcı markalı cihazlarda), kullanıcıların önyükleyicinin kilidini açmadan önce önemli teknik engellerle uğraşması gerektiğinden bu durum bir sorun teşkil etmektedir. Huawei telefonları gibi diğer cihazlar, benzersiz bir önyükleyici kilit açma kodu için OEM'e dilekçe vermenizi gerektirir; bu, girişte küçük bir engeldir, ancak çok zor değildir. Daha da iyisi, Geliştirici Ayarlarında yalnızca bir seçeneği işaretlemenizi ve ardından birkaç tane göndermenizi gerektiren Google Nexus/Pixel serisi veya OnePlus telefonlarıdır. hızlı başlatma komutlar.

Ancak önyükleyicinizin kilidini açmak ne kadar zor olursa olsun, bir şey her zaman sabit kalacaktır: kilidi açarken cihazı silme zorunluluğu. Bu, bariz güvenlik nedenleriyle yapılır, çünkü önyükleyicinin kilidi açıldığında tüm veri bölümünüz kolayca çıkarılabilir. Kötü niyetli bir varlık (teknik bilgi birikimine sahip), verilerinize erişim kazanırsa özel bir kurtarma işlemini flaşla başlatabilir ve cihazınızın tam yedeğini çıkarabilir. Bu nedenle önyükleyicinizin kilidini açmak bir güvenlik riski olarak kabul edilir ve bu nedenle cihazınız kilidi açıldıktan sonra silinir. Her şeyin olması gerektiği gibi gittiğini varsayarsak, normal bir kullanıcı, standart Android kilitleme yöntemlerini atlamak için önyükleyicinin kilidini açan saldırganlara karşı güvende olmalıdır. Ancak her şey plana göre gitmiyor.


OnePlus 3/3T Bootloader'ın Kilidini Açma Güvenlik Açığı

Yeni bir güvenlik açığı seti ortaya çıktı az önce açıklandı kaydeden Roee Hay (@roeehay), bunlardan ilki OnePlus 3/3T'nin önyükleyicisinin kilidinin açılmasına izin veriyor kullanıcı onayı olmadan ve fabrika ayarlarına sıfırlamayı tetiklemeden. Etiketli bu güvenlik açığı CVE-2017-5625, kritik öneme sahip bir güvenlik açığı olarak kabul edilir ve OxygenOS 3.2-4.0.1 üzerinde çalışan tüm OnePlus 3/3T cihazlarını etkiler. Zaten yükseltme yapmış olan kullanıcılar artımlı OxygenOS 4.0.2 güncelleme etkilenmez Bay Hay bu kusuru özel olarak OnePlus'a açıkladığından bu güvenlik açığı nedeniyle 23 Ocak'ta Böylece sorunu hemen düzeltebilirler.

Kusur, özel, gizli bir fastboot komutu göndererek çalışır: fastboot oem 4F500301. Bu komutun gönderilmesiyle kullanıcının önyükleyici kilit durumu atlanır (Geliştirici Ayarlarında "OEM Kilit Açmaya İzin Ver" seçeneği etkinleştirilmemiş olsa bile). Cihaz kullanıcıyı uyarmaz ve olması gerektiği gibi cihazı silmez; aslında cihaz yine de önyükleyicinin kilitli olduğunu bildirecektir! Başka bir fastboot komutu, fastboot oem 4F500302, bazı önyükleyici ayarlarını sıfırlar ve kilidi açılmış bir cihazı kilitlemek için kullanılabilir.

Bay Hay, ilk hızlı başlatma komutunun kendisinin "" adını verdiği şeyi belirlediğini keşfetti.sihirli Bayrak", bir yanıp sönme veya silme komutu gerçekleştirilirken önyükleyicinin kilit durumunu belirleyen kontrolü geçersiz kılar.

// 'oem 4F500301' handler
intsub_918427F0()
{
magicFlag_dword_91989C10 = 1;
if ( dword_9198D804 != dword_9198D804 )
assert(1, dword_9198D804, dword_9198D804);
return sendOK((int)"", dword_9198D804);
}

Fastboot Flaş İşleyicisi


// 'flash' handler
constchar *__fastcall sub_91847EEC(char *partitionName, int *a2, int a3)
{
char *pname; // r5@1
...
pname = partitionName;
v4 = a2;
v5 = a3;
if ( returnTRUE1(partitionName, (int)a2) )
{
result = (constchar *)sub_918428F0(pname, v6);
if ( (result || magicFlag_dword_91989C10)
&& ((result = (constchar *)sub_91842880(pname, v10)) != 0 || magicFlag_dword_91989C10) )
{
result = (constchar *)sub_918428F0(pname, v10);
if ( !result || magicFlag_dword_91989C10 )
goto LABEL_7;
v8 = dword_9198D804;
if ( dword_9198D804 != dword_9198D804 )
goto LABEL_28;
v11 = "Critical partition flashing is not allowed";
}
else
{
v8 = dword_9198D804;
if ( dword_9198D804 != dword_9198D804 )
goto LABEL_28;
v11 = "Partition flashing is not allowed";
}
return (constchar *)FAIL2((int)v11, v10);
}
LABEL_7:
...
if ( *v4 != 0xED26FF3A )
{
if ( *v4 == 0xCE1AD63C )
cmd_flash_meta_img(pname, (unsigned int)v4, v5);
else
cmd_flash_mmc_img(pname, (int)v4, v5);
goto LABEL_10;
}
v7 = v4;
}
cmd_flash_mmc_sparse_img(pname, (int)v7, v5);
...
 }

devamını oku

Fastboot Silme İşleyicisi


// 'erase' handler
int __fastcall sub_91847118(char *partitionName, int a2, int a3)
{
 ...
v3 = partitionName;
v4 = returnTRUE1(partitionName, a2);
if ( !v4 )
{
LABEL_7:
...
if ( v4 )
{
if ( dword_9198D804 == dword_9198D804 )
return eraseParition(v3);
}
...
}
v4 = sub_918428F0(v3, v5);
if ( !v4 && !magicFlag_dword_91989C10 )
{
v6 = dword_9198D804;
if ( dword_9198D804 == dword_9198D804 )
{
v7 = "Partition erase is not allowed";
return FAIL2((int)v7, v5);
}
goto LABEL_23;
}
v4 = sub_91842880(v3, v5);
if ( !v4 && !magicFlag_dword_91989C10 )
{
v6 = dword_9198D804;
if ( dword_9198D804 == dword_9198D804 )
{
v7 = "Partition flashing is not allowed";
return FAIL2((int)v7, v5);
}
LABEL_23:
assert(v4, v5, v6);
}
v4 = sub_918428F0(v3, v5);
if ( !v4 || magicFlag_dword_91989C10 )
goto LABEL_7;
v6 = dword_9198D804;
...
v7 = "Critical partition erase is not allowed";
return FAIL2((int)v7, v5);
}

devamını oku

CVE-2017-5626 şu amaçlarla kullanılabilir: çekirdek kodunu çalıştır. Saldırgan istediği herhangi bir önyükleme görüntüsünü flaşlayabilir. Bununla birlikte, değiştirilmiş bir önyükleme görüntüsünü yanıp sönerlerse Doğrulanmış Önyükleme devreye girecek ve kullanıcıyı bir değişikliğin algılandığı konusunda uyaracaktır. Bunu atlamanın bir yolu, daha eski, değiştirilmemiş bir önyükleme görüntüsünün yanıp sönmesidir; bu, o zamandan beri yamalı olan eski istismarları içerir. Öyle bile olsa, size verilen "uyarı" yalnızca 5 saniye sürer ve otomatik olarak kendini kapatır ve saldırganın kodunun çalışmaya devam edeceği doğrulanmış önyükleme durumuna önyükleme yapar.

Bay Hay, bu kusurun kötü niyetli bir şekilde istismar edilebileceği tonlarca yol olduğundan bahsediyor. Örneğin, SELinux modunu şu şekilde ayarlamak için bir önyükleme görüntüsünü değiştirdi: hoşgörülü ayrıca önyükleme sırasında otomatik olarak ADB erişimini de içerir. Ardından, değiştirilmiş önyükleme görüntüsünü flaşlamak için bu güvenlik açığından yararlandıktan sonra, bir Kullanıcı kimlik bilgilerini bile girmeden önce kök kabuk.

OnePlus3:/ # id
uid=0(root) gid=0(root) groups=0(root),1004(input),1007(log),1011(adb),
1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),
3003(inet),3006(net_bw_stats),3009(readproc) context=u: r: su: s0

OnePlus3:/ # getenforce
Permissive

Bunun oldukça ciddi olduğunu söylemeye gerek yok. Tipik güvenlik önlemleriniz nedeniyle güvenli olduğunu düşündüğünüz çalıntı veya tuğlalanmış bir cihaz, bu istismar kullanılarak tamamen etkisiz hale getirilebilir.


OnePlus 3/3T SELinux Güvenlik Açığı

Etiketli ikinci güvenlik açığı CVE-2017-5624, etkiler OxygenOS'un tüm sürümleri ve birinin şunu yapmasına izin verir: dm-verity'yi devre dışı bırakın. Bay Hay, bu güvenlik açığını OnePlus Güvenlik ekibine şu tarihte açıkladı: 16 Ocakancak şunu da belirtmek gerekir ki XDA Kıdemli Üyesi th3g1zbu güvenlik açığını bağımsız olarak keşfetti Açık 23 Ocak. OnePlus ile konuştuk. bu ikinci güvenlik açığını kabul ettiklerini ve düzelteceklerini doğruladılar gelecekteki bir güncellemede.

Bu saldırının gerçekleştirilmesi de oldukça basittir. Dm-verity'yi devre dışı bırakmak (veya etkinleştirmek) için yalnızca tek bir fastboot komutunun verilmesi gerekir: fastboot oem disable dm-verity. Bunu etkinleştirmek için basitçe yayınlayın fastboot oem enable dm-verity. Önyükleyicinin dökümünden alınan bu komutun işleyicisi aşağıda gösterilmiştir.


// 'oem disable_dm_verity' handler
intsub_9183B8EC()
{
int v0; // r0@1
int v1; // r1@1

dmVerity_dword_91960740 = 0;
v0 = sub_91845E10("ANDROID-BOOT!");
if ( dword_9198D804 != dword_9198D804 )
assert(v0, v1, dword_9198D804);
return sendOK((int)"", v1);
}

Bu komutun verilmesi, Bay Hay'in dmVerity adını verdiği ve önyükleyici tarafından dm-verity'yi etkinleştirebilen veya devre dışı bırakabilen bir çekirdek komut satırı argümanı göndermek için kullanılan bir bayrak ayarlayacaktır.

Bu, OnePlus 3/3T'de kullanıcının izni olmadan yüksek ayrıcalıklı kod yürütmeye yönelik ilk güvenlik açığıyla ve kullanıcının verilerine erişimle birlikte kullanılabilir. Örneğin Bay Hay, /system/priv-app dizinine bir uygulama yükleyebildi ve bu da uygulamanın priv-app etki alanına eklenmesine neden oldu. Bu, kötü amaçlı bir uygulamanın cihazdaki yüksek ayrıcalıklı işlevlere erişmesine olanak tanır. Bay Hay, aşağıdaki videoda her iki güvenlik açığından da aynı anda yararlanıldığını gösteriyor. Gördüğünüz gibi, cihazı başlattığında oluşturduğu uygulamanın önceden yüklenmiş olduğu gösteriliyor.


OnePlus'tan Sonuç ve Not

Bu iki güvenlik açığının potansiyel suistimalleri korkutucudur. Bay Hay'i bu güvenlik açıklarını özel olarak ve çok hızlı bir şekilde OnePlus'a açıkladığı için takdir ediyoruz. Yine de, bu tür fastboot komutlarının bu cihazlarda erişilebilir olması konusunda endişelenmeden edemiyoruz. Nasıl yapılacağına dair bir rehber yazdığımızda gizli fastboot komutlarını keşfetamacımız, kullanıcılara deneyimlerini geliştirmek için kullanabilecekleri bazı ilginç komutlar olabileceği konusunda bilgi vermekti. Bu kadar ayrıcalıklı komutların önyükleyici kodunda yer alacağını hiç düşünmemiştik. gelince "Neden" bu fastboot komutları ürün yazılımına dahil edilmiştir, bize "yorum yok." 

Şimdilik, her Oxygen OS sürümü yayınlanır yayınlanmaz OnePlus 3/3T'nizi güncellemediyseniz, bunu yapmanızı öneririz. hemen güncelleyin. Oxygen OS 4.0.2'ye güncelleme sizi ilk güvenlik açığından koruyacaktır ancak OnePlus'a kadar beklememiz gerekecek Bunlardan tamamen güvende olduğunuzu söyleyebilmemiz için ikinci güvenlik açığını gideren bir güncelleme yayınlıyor istismar eder. Gelecekte bu tür istismarlara karşı dikkatli olmamız gerekecek.


Kaynak: Roee Hay