वनप्लस 3 और वनप्लस 3टी के लिए बूटलोडर संबंधी दो खामियां पाई गई हैं। एक को ठीक कर दिया गया है, दूसरे को ठीक किया जा रहा है।
चूंकि यह लेख प्रकाशित हुआ था, ऑक्सीजन ओएस संस्करण 4.0.3 ने इस लेख में चर्चा की गई दूसरी सुरक्षा भेद्यता, अर्थात् डीएम-वेरिटी एक को ठीक कर दिया है।
एंड्रॉइड रूटिंग, कस्टम रोम, कर्नेल और अन्य संशोधनों की अद्भुत दुनिया में प्रवेश करने से पहले, आपको सबसे पहले अपने डिवाइस पर बूटलोडर को अनलॉक करना होगा।
कुछ उपकरणों (विशेष रूप से वाहक ब्रांड वाले) पर, यह एक समस्या पैदा करता है क्योंकि उपयोगकर्ताओं को बूटलोडर को अनलॉक करने से पहले महत्वपूर्ण तकनीकी बाधाओं से निपटना पड़ता है। हुआवेई फोन जैसे अन्य उपकरणों के लिए आपको एक अद्वितीय बूटलोडर अनलॉकिंग कोड के लिए OEM को याचिका दायर करने की आवश्यकता होती है - प्रवेश के लिए एक छोटी सी बाधा, लेकिन बहुत मुश्किल नहीं। Google Nexus/Pixel श्रृंखला या OnePlus फ़ोन और भी बेहतर हैं जिनके लिए आपको केवल डेवलपर सेटिंग्स में एक विकल्प पर टिक करना होगा और फिर कुछ भेजना होगा fastboot आदेश.
लेकिन आपके बूटलोडर को अनलॉक करना कितना भी मुश्किल क्यों न हो, एक चीज हमेशा स्थिर रहेगी: अनलॉक करने पर डिवाइस को पोंछने की आवश्यकता। यह स्पष्ट सुरक्षा कारणों से किया जाता है, क्योंकि बूटलोडर अनलॉक होने के बाद आपका संपूर्ण डेटा विभाजन आसानी से निकाला जा सकता है। एक दुर्भावनापूर्ण इकाई (तकनीकी जानकारी के साथ) एक कस्टम पुनर्प्राप्ति को फ्लैश कर सकती है और यदि वे आपके डेटा तक पहुंच प्राप्त करती है तो आपके डिवाइस का पूरा बैकअप निकाल सकती है। इसीलिए आपके बूटलोडर को अनलॉक करना एक सुरक्षा जोखिम माना जाता है, और इसीलिए इसे अनलॉक करने के बाद आपके डिवाइस को मिटा दिया जाता है। यह मानते हुए कि सब कुछ वैसा ही चल रहा है जैसा होना चाहिए, एक नियमित उपयोगकर्ता को मानक एंड्रॉइड लॉक विधियों को बायपास करने के लिए बूटलोडर को अनलॉक करने वाले हमलावरों से सुरक्षित रहना चाहिए। हालाँकि, सब कुछ योजना के अनुसार नहीं होता है।
वनप्लस 3/3T बूटलोडर भेद्यता को अनलॉक कर रहा है
कमजोरियों का एक नया सेट था अभी खुलासा किया है रोई हे द्वारा (@roeehay), जिनमें से पहला वनप्लस 3/3T के बूटलोडर को अनलॉक करने की अनुमति देता है उपयोगकर्ता की पुष्टि के बिना और फ़ैक्टरी रीसेट को ट्रिगर किए बिना। यह भेद्यता, लेबल की गई सीवीई-2017-5625, को एक गंभीर गंभीरता भेद्यता माना जाता है और यह OxygenOS 3.2-4.0.1 पर चलने वाले सभी वनप्लस 3/3T उपकरणों को प्रभावित करता है। जो उपयोगकर्ता पहले ही इसमें अपग्रेड कर चुके हैं वृद्धिशील ऑक्सीजनओएस 4.0.2 अद्यतन प्रभावित नहीं हैं इस भेद्यता से, जैसा कि श्री हे ने निजी तौर पर वनप्लस को इस दोष का खुलासा किया था 23 जनवरी को ताकि वे इस मुद्दे को तुरंत ठीक कर सकें।
दोष एक मालिकाना, छिपा हुआ फास्टबूट कमांड भेजकर काम करता है: fastboot oem 4F500301
. इस कमांड को भेजने से, उपयोगकर्ता की बूटलोडर लॉक स्थिति को बायपास कर दिया जाता है (तब भी जब डेवलपर सेटिंग्स में "ओईएम अनलॉकिंग की अनुमति दें" सक्षम नहीं किया गया हो)। डिवाइस उपयोगकर्ता को संकेत नहीं देता है और न ही यह डिवाइस को मिटाता है जैसा कि होना चाहिए - वास्तव में, डिवाइस अभी भी रिपोर्ट करेगा कि बूटलोडर लॉक हो गया है! एक और फास्टबूट कमांड, fastboot oem 4F500302
, कुछ बूटलोडर सेटिंग्स को रीसेट कर देगा, और पहले से अनलॉक किए गए डिवाइस को लॉक करने के लिए उपयोग किया जा सकता है।
श्री हे ने पाया कि पहला फास्टबूट कमांड वह सेट करता है जिसे उन्होंने "" करार दिया है।जादुई झंडा"जो उस चेक को ओवरराइड करता है जो फ्लैशिंग या इरेज़िंग कमांड निष्पादित करते समय बूटलोडर की लॉक स्थिति निर्धारित करता है।
// '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);
}
फास्टबूट फ़्लैश हैंडलर
// '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);
...
}
और पढ़ें
फास्टबूट इरेज़ हैंडलर
// '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);
}
और पढ़ें
CVE-2017-5626 का उपयोग किया जा सकता है कर्नेल कोड निष्पादित करें. एक हमलावर अपनी इच्छानुसार किसी भी बूट छवि को फ्लैश कर सकता है। हालाँकि, यदि वे एक संशोधित बूट छवि फ्लैश करते हैं तो सत्यापित बूट शुरू हो जाएगा और उपयोगकर्ता को चेतावनी देगा कि एक संशोधन का पता चला है। इसे बायपास करने का एक तरीका एक पुरानी, असंशोधित बूट छवि को फ्लैश करना है - जिसमें पुराने कारनामे शामिल हैं जिन्हें बाद में पैच कर दिया गया है। फिर भी, आपको दी गई "चेतावनी" केवल 5 सेकंड तक रहती है, और यह स्वचालित रूप से स्वयं को खारिज कर देती है और सत्यापितबूट स्थिति में बूट हो जाती है जहां हमलावर का कोड अभी भी निष्पादित होगा।
श्री हे का उल्लेख है कि ऐसे कई तरीके हैं जिनसे इस दोष का दुर्भावनापूर्ण तरीके से फायदा उठाया जा सकता है। उदाहरण के लिए, उन्होंने SELinux मोड को सेट करने के लिए एक बूट छवि को संशोधित किया अनुमोदक साथ ही स्वचालित रूप से बूट पर ADB एक्सेस शामिल करें। फिर, अपनी संशोधित बूट छवि को फ्लैश करने के लिए इस भेद्यता का फायदा उठाने के बाद, वह एक तक पहुंचने में सक्षम था उपयोगकर्ता द्वारा अपनी साख दर्ज करने से पहले रूट शेल।
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
कहने की जरूरत नहीं है, यह काफी गंभीर है। एक चोरी या ईंट से बना उपकरण जिसे आप अपने विशिष्ट सुरक्षा उपायों के कारण सुरक्षित समझते हैं, उसे इस शोषण का उपयोग करके पूरी तरह से हराया जा सकता है।
वनप्लस 3/3T SELinux भेद्यता
दूसरी भेद्यता, लेबल की गई सीवीई-2017-5624, प्रभावित करता है OxygenOS के सभी संस्करण और किसी को इसकी अनुमति देता है डीएम-सत्यापन अक्षम करें। श्री हे ने वनप्लस सुरक्षा टीम को इस भेद्यता का खुलासा किया 16 जनवरी, लेकिन यह ध्यान दिया जाना चाहिए कि XDA वरिष्ठ सदस्य th3g1zस्वतंत्र रूप से इस भेद्यता की खोज की पर 23 जनवरी. हमने वनप्लस से बात की है जिनके पास है पुष्टि की गई कि उन्होंने स्वीकार कर लिया है और इस दूसरी भेद्यता को ठीक कर देंगे भविष्य के अद्यतन में।
इस हमले को अंजाम देना भी काफी सरल है. डीएम-वेरिटी को अक्षम (या सक्षम) करने के लिए केवल एक फास्टबूट कमांड जारी करने की आवश्यकता है: fastboot oem disable dm-verity
. इसे सक्षम करने के लिए, बस जारी करें fastboot oem enable dm-verity
. बूटलोडर के डंप से लिया गया इस कमांड का हैंडलर नीचे दिखाया गया है।
// '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);
}
इस आदेश को जारी करने से एक ध्वज स्थापित होगा, जिसे श्री हे dmVerity कहते हैं, जिसका उपयोग बूटलोडर द्वारा कर्नेल कमांड लाइन तर्क भेजने के लिए किया जाता है जो dm-verity को सक्षम या अक्षम कर सकता है।
इसका उपयोग उपयोगकर्ता की सहमति के बिना वनप्लस 3/3T पर अत्यधिक विशेषाधिकार प्राप्त कोड को निष्पादित करने की पहली भेद्यता के साथ संयोजन में किया जा सकता है - और उपयोगकर्ता के डेटा तक पहुंच के साथ। उदाहरण के लिए, मिस्टर हे /system/priv-app पर एक एप्लिकेशन इंस्टॉल करने में सक्षम थे, जिसके कारण एप्लिकेशन को priv-app डोमेन में जोड़ा गया। यह दुर्भावनापूर्ण एप्लिकेशन को डिवाइस पर अत्यधिक विशेषाधिकार प्राप्त कार्यों तक पहुंच की अनुमति देता है। श्री हे नीचे दिए गए वीडियो में दिखाते हैं कि इन दोनों कमजोरियों का एक साथ फायदा उठाया जा रहा है। जैसा कि आप देख सकते हैं, जब वह डिवाइस को बूट करता है तो उसके द्वारा बनाया गया एप्लिकेशन पहले से इंस्टॉल दिखाया जाता है।
वनप्लस से निष्कर्ष और नोट
इन दो सुरक्षा कमजोरियों का संभावित दुरुपयोग भयावह है। हम वनप्लस को निजी तौर पर और इतनी जल्दी इन कमजोरियों का खुलासा करने के लिए श्री हे की सराहना करते हैं। फिर भी, हम चिंतित हुए बिना नहीं रह सकते कि ऐसे फास्टबूट कमांड इन उपकरणों पर उपलब्ध हैं। जब हमने कैसे करें इस पर एक मार्गदर्शिका लिखी छिपे हुए फास्टबूट कमांड खोजें, हमारा इरादा उपयोगकर्ताओं को यह सूचित करना था कि कुछ दिलचस्प कमांड हो सकते हैं जिनका उपयोग वे अपने अनुभव को बढ़ाने के लिए कर सकते हैं। हमने कभी नहीं सोचा था कि ऐसे अत्यधिक विशेषाधिकार प्राप्त कमांड बूटलोडर कोड में बैठे होंगे. से संबंधित "क्यों" ये फास्टबूट कमांड फर्मवेयर में शामिल हैं, हमें दिया गया था "कोई टिप्पणी नहीं।"
अभी के लिए, यदि आप प्रत्येक ऑक्सीजन ओएस बिल्ड जारी होने के बाद भी अपने वनप्लस 3/3T को अपडेट नहीं कर रहे हैं, तो हम आपको सलाह देते हैं तुरंत अद्यतन करें. ऑक्सीजन ओएस 4.0.2 में अपडेट करने से आप पहली भेद्यता से बच जाएंगे, लेकिन हमें वनप्लस तक इंतजार करना होगा इससे पहले कि हम कह सकें कि आप इनसे पूरी तरह सुरक्षित हैं, एक अपडेट जारी किया गया है जो दूसरी भेद्यता को ठीक करता है शोषण. हमें भविष्य में इस प्रकार के कारनामों पर नजर रखनी होगी।
स्रोत: रोई हे