- अगर बिना पासवर्ड वाला BitLocker discrete TPM पर निर्भर करता है, तो बूट के दौरान TPM से CPU तक VMK भेजे जाने के पल SPI बस पर plaintext key कैप्चर की जा सकती है
- Lenovo L13 पर किया गया प्रयोग 100 डॉलर से कम कीमत वाले DSLogic Plus से किया गया, लेकिन 33MHz SPI बस को स्थिर रूप से पढ़ने के लिए इसकी sampling limit बड़ी बाधा रही
- कैप्चर किए गए डेटा को SPI → TIS → TPM 2.0 क्रम में समझना पड़ता है, और
TPM2_Unsealresponse buffer में5761से शुरू होने वाली 32-byte key मिलती है - निकाली गई key से
dislocker-fuseका उपयोग करके BitLocker partition mount किया गया, औरsethc.exeकोcmd.exeसे बदलकर Shift 5 बार दबाने पर SYSTEM shell तक पहुंच मिली - केवल discrete TPM पर्याप्त सुरक्षा नहीं देता; वास्तविक बचाव fTPM का उपयोग या BitLocker PIN/पासफ़्रेज़ सेट करने पर निर्भर है
बिना पासवर्ड वाले BitLocker और discrete TPM की कमजोरी
- BitLocker partition को FVEK(Full Volume Encryption Key) से एन्क्रिप्ट किया जाता है
- FVEK को फिर VMK(Volume Master Key) से एन्क्रिप्ट किया जाता है, और एन्क्रिप्टेड डेटा के साथ डिस्क पर रखा जाता है
- इस संरचना की वजह से पूरी डिस्क को दोबारा एन्क्रिप्ट किए बिना key rotation संभव होती है
- VMK को TPM में रखा जाता है
- इसलिए डिस्क को केवल उसी कंप्यूटर पर बूट होने पर decrypt किया जा सकता है
- Active Directory में recovery mechanism मौजूद है
- कमजोर बिंदु वह क्षण है जब CPU, डिस्क decrypt करने के लिए TPM से VMK भेजने का अनुरोध करता है
- VMK TPM और CPU के बीच SPI बस से plaintext में गुजरता है
- इस मान को कैप्चर कर लिया जाए तो उससे BitLocker डिस्क decrypt की जा सकती है
TPM communication कैप्चर करने में इस्तेमाल हुआ हार्डवेयर
- प्रयोग में DSLogic Plus logic analyzer इस्तेमाल किया गया
- इसे 2021 में टैक्स और shipping सहित 100 डॉलर से कम में खरीदा गया था
- स्थिर signal पाने के लिए sampling frequency बस frequency की लगभग 3~4 गुना होनी चाहिए
- लक्ष्य SPI बस 33MHz की थी, इसलिए कम से कम 100MHz sampling चाहिए थी
- DSLogic Plus की specification अधिकतम 16 channels पर 400MHz बताती है, लेकिन वास्तविक उपयोग स्थितियों में सीमाएं हैं
- DSLogic Plus में capture mode और channels की संख्या के अनुसार स्पष्ट सीमाएं हैं
- एक साथ कैप्चर किए जाने वाले channels बढ़ने पर sampling frequency घट जाती है
- stream mode लगभग 1 मिनट तक बड़ा डेटा कैप्चर कर सकता है, लेकिन 3 channels पर 100MHz तक सीमित है
- buffer mode 400MHz sampling दे सकता है, लेकिन केवल कुछ milliseconds तक चलता है, इसलिए यह इस काम के लिए व्यावहारिक नहीं था
- एक अधिक पेशेवर विकल्प लगभग 10 गुना महंगा Saleae है, और अन्य उपकरण sigrok supported hardware list में देखे जा सकते हैं
बोर्ड से कनेक्शन और capture timing
- SPI एक shared bus है, इसलिए छोटे TPM pin से सीधे जुड़ना जरूरी नहीं है
- अगर उसी SPI बस से जुड़ा कोई बड़ा component हो, तो वहीं hook लगाया जा सकता है
- इस प्रयोग में पास की SPI flash chip की पहचान कर उसी का उपयोग किया गया
- component marking होने से datasheet ढूंढकर उसका उपयोग समझना आसान था
- DSLogic के साथ sampling frequency गिरने की वजह से SPI lines में से केवल 3 ही कैप्चर की गईं
- महत्वपूर्ण lines थीं CLK, MOSI, MISO
- threshold voltage को signal voltage के लगभग आधे पर सेट करना चाहिए
- मापा गया signal voltage 3.3V था, और उचित threshold लगभग 1.6V था
- जिस VMK की तलाश थी, उसका उपयोग POST चरण के बाद के हिस्से में होता है
- Lenovo L13 पर यह splash screen के तुरंत बाद, कुल लगभग 25 सेकंड के boot में लगभग 14 सेकंड पर था
- उससे पहले भी SPI activity थी, लेकिन वह मुख्यतः शुरुआती boot stage की reading और verification थी, TPM communication नहीं
- boot शुरू होते ही capture शुरू किया जा सकता है, या अनावश्यक डेटा घटाने के लिए लगभग 7 सेकंड बाद शुरू किया जा सकता है
SPI, TIS, TPM 2.0 की व्याख्या
- कैप्चर किए गए signals को SPI, TIS, TPM 2.0 इन तीन layers में बांटकर समझना पड़ता है
- SPI एक सरल protocol है, इसलिए सामान्य logic analyzer से भी इसे decode किया जा सकता है
- clock के 0 से 1 पर जाने के क्षण data line की स्थिति bit value बनती है
- उदाहरण में MOSI 8 clocks तक 0 था इसलिए
0x00, और MISO में केवल पहला bit high था इसलिए0x80समझा गया
- सबसे कठिन हिस्सा TIS(TPM Interface Specification) था
- कोई काम करने वाला decoder नहीं मिला, इसलिए इसे manually संभालना पड़ा
- libsigrok decoders सटीक data interpretation में सफल नहीं हुए, लेकिन TPM exchange होने वाले अनुमानित हिस्से ढूंढने में मदद मिली
- असफलता का कारण capture में Chip Select का न होना, clock का गलत होना, कुछ bytes का छूट जाना, या कोई और वजह हो सकती है
- master से slave को भेजे जाने वाले requests में दोहराया जाने वाला pattern दिखता है
- slave तैयार होने का संकेत
80भेजता है - master
D4 00 24header और TPM bytes भेजता है - slave
01 FFसे पुष्टि करता है कि पढ़ लिया गया है
- slave तैयार होने का संकेत
- slave से master की ओर आने वाले responses register setup और read पर निर्भर करते हैं
- उदाहरण frame
D4 00 24address से 1 byte पढ़ने का परिणाम है - slave
80के साथ transaction शुरू करता है, और उसके बाद रुचि का मान0x80दिखाई देता है
- उदाहरण frame
TPM2_Unseal response में key ढूंढना
- key return करने का अनुरोध करने वाला TPM command TPM2_Unseal है
- यह command TPM 2.0 specification part 3 में परिभाषित है
- request frames की तुलना में MISO line के responses पर ध्यान देकर TPM transactions अलग किए गए
- raw SPI data में
80 00 00 00 01 ..mask से filter किया गया और केवल आखिरी wildcard byte रखा गया - TPM transaction की शुरुआत
80 01या80 02header से पहचानी गई - key वाला response लंबा authenticated response था और
80 02से शुरू होता था
- raw SPI data में
- Unseal command और response के बीच लगभग 10ms delay था
80 02header password session को दर्शाता है, जो अधिकांश requests के plaintext80 01header से अलग है- संभव है कि request authentication और response HMAC processing की वजह से यह delay आया हो
- TPM commands और responses को bytes एक-एक करके फिर से जोड़ा गया
- decoding के लिए tpmstream-web tool इस्तेमाल किया गया
- response buffer के भीतर key
5761से शुरू होती है और उसकी लंबाई 32 bytes है
डिस्क mount करना और backdoor
- निकाली गई key को एक file में सेव करने के बाद उसे
dislocker-fuseमें देकर BitLocker partition mount किया गया - उदाहरण command में key file बनाई जाती है,
/dev/sdd3को./mnt/पर जोड़ा जाता है, और फिरdislocker-fileको दोबारा./mnt2/पर mount किया जाता है - सबसे सरल backdoor Windows के sticky keys program को
cmd.exeसे overwrite करने का तरीका हैWindows/System32/cmd.exeकोWindows/System32/sethc.exeपर copy किया जाता है- डिस्क को वापस लैपटॉप में लगाकर boot करने के बाद Shift key को 5 बार दबाने पर SYSTEM shell मिल जाती है
हार्डवेयर सीमाएं और बचाव
- DSLogic की इस काम के लिए सिफारिश करना कठिन है
- कई captures असफल रहे और उन्हें फेंकना पड़ा
- बस speed की 3 गुना sampling बस इतनी ही थी कि लगातार clock मिल सके, और कुछ bytes फिर भी छूट गए
- हार्डवेयर सीमाओं की वजह से protocol को गहराई से समझने और capture को manually interpret करने में बहुत समय लगा
- अगर किसी employer को हार्डवेयर खरीदना हो, तो पेशेवर logic analyzer लेना बेहतर माना गया
- discrete TPM का उपयोग अपेक्षा के विपरीत system security नहीं बढ़ाता, बल्कि सुरक्षा का भ्रम पैदा कर सकता है
- बचाव के दो तरीके हैं
- fTPM का उपयोग करें
- अगर discrete TPM इस्तेमाल करना ही पड़े, तो BitLocker पर PIN या पासफ़्रेज़ सेट करें
- Microsoft भी उन संगठनात्मक क्षेत्रों के लिए, जहां डेटा सुरक्षा का स्तर अधिक चाहिए, BitLocker PIN या पासफ़्रेज़ सेट करने की सिफारिश करता है
1 टिप्पणियां
Hacker News की राय
सभी TPM ऐसे man-in-the-middle हमलों को रोकने के लिए encrypted session सपोर्ट करते हैं।
TPM2_StartAuthSessionइस्तेमाल करके हर session command में encryption specify करना होता है, लेकिन BitLocker इसे इस्तेमाल नहीं करता, इसलिए यह गंभीर failure है। Microsoft को इसे ठीक करना चाहिएतुलना के लिए, systemd TPM के साथ LUKS disk encryption इस्तेमाल करते समय encrypted sessions का उपयोग करता है: https://github.com/systemd/systemd/commit/acbb504eaf1be51572...
TPM के बारे में ज्यादा नहीं जानता, इसलिए पूछ रहा हूं: authenticated sessions कैसे काम करते हैं? operating system TPM को अपनी पहचान ऐसे कैसे साबित करता है कि attacker वास्तविक man-in-the-middle attack में उसे forge न कर सके? operating system की तरफ stored कोई secret या key तो अभी encryption key न होने के कारण disk पर plaintext में ही होनी चाहिए लगती है
मान भी लें कि operating system किसी तरह TPM की identity verify करता है और disk की कुछ files modify करके इसे bypass करना असंभव बना देता है, तब भी समझ नहीं आता कि attacker को emulator में वही routine चलाने से क्या रोकता है। Intel ME या SGX जैसी CPU-side secure execution environment के साथ integrate किए बिना इस approach से वास्तविक security मिलना मुश्किल लगता है, और तब शायद TPM की जरूरत ही नहीं रहेगी
2021 का एक और article भी है
https://arstechnica.com/gadgets/2021/08/how-to-go-from-stole...
कुछ laptop manufacturers laptop खोलने पर TPM wipe करने वाली setting देते हैं। अगर आपने RAM add कर सकते हैं या नहीं देखने के लिए laptop खोला है, तो उम्मीद करें कि आपके पास BitLocker recovery key का access या backup हो
शायद plastic काटकर भी access किया जा सकता है। Matrix में parasite extraction scene जैसे तरीके से
इसमें नया कुछ नहीं है। Default setting PIN नहीं मांगती, लेकिन Microsoft docs कई attacks explain करते हैं और उन्हें पूरी तरह रोकने के लिए BitLocker PIN setting recommend करते हैं। TPM brute force को रोकता है, इसलिए PIN काफी weak भी हो तो चलेगा
उदाहरण: https://learn.microsoft.com/en-us/windows/security/operating...
Behavior:Win32/AccessibilityEscalationBitLocker और इस तरह की encryption में, मुझे हमेशा यह structure समझ नहीं आया कि decryption key system अपने-आप provide करता है। अगर पूरा laptop चोरी हो जाए, तो BitLocker कौन-सी security देता है? attacker के perspective से system boot हो जाता है और बस user account password मांगता है
मेरी समझ में, यह मेरे data को तब protect करता है जब hard disk को laptop से निकालकर किसी दूसरे system पर चलाने की कोशिश की जाए। इसी शायद मूर्खतापूर्ण misunderstanding की वजह से मैंने हमेशा BitLocker में manually enter करने वाला password set किया है, और LUKS में भी हमेशा ऐसा ही किया है। क्या मेरी सोच पूरी तरह गलत है?
आम तौर पर वे drive wipe करके बेचने की कोशिश करेंगे, और शायद सच में cold boot attack try नहीं करेंगे। हालांकि सब threat model पर depend करता है। Personally, personal devices पर full disk encryption इस्तेमाल करने की मेरी मुख्य वजह storage device dispose करते समय physical destruction की जरूरत कम करना है
hard disk fail हो जाए, तब भी मुझे यह confirm करने के लिए उसे सच में खोलकर निकालना नहीं पड़ता कि मेरा data चला गया है। मेरे devices आम तौर पर बाहर रहते समय sleep mode में होते हैं, इसलिए अगर कोई cold boot attack करना चाहे तो वैसे भी कर सकता है
जैसा आपने कहा, अगर decryption key system को automatic मिल जाती है, तो वह key RAM में होती है और attacker द्वारा export करके encrypted disk पर reuse करने के लिए ready होती है। cold boot attack[1] एक ऐसा attack vector है जिस पर यह तय करने के लिए और पढ़ना चाहिए कि वह आपके threat model में fit बैठता है या नहीं
[1] https://en.wikipedia.org/wiki/Cold_boot_attack
अगर key किसी shared bus से गुजरती है, तो क्या इसका मतलब है कि system का कोई भी component इस logic analyzer की तरह आसानी से key intercept कर सकता है? यह supply-chain security nightmare जैसा लगता है
अगर कोई भी laptop boot करके decrypted hard drive तक पहुंच सकता है, तो पहले key sniff करने से क्या फर्क पड़ता है? अगर आप laptop boot कर सकते थे, तो वैसे भी final output तक पहुंच सकते थे
अगर आप चाहते हैं कि laptop चोरी होने की स्थिति में BitLocker आपकी रक्षा करे, तो वैसे भी आपको password इस्तेमाल करना होगा और sleep mode को बंद करना होगा, hibernate नहीं
तो TPM का “trusted” hardware अभी असल में क्या कर रहा है? क्या boot measurement भी spoof किया जा सकता है? ऊपर से यह हद से ज्यादा मूर्खतापूर्ण है. key material bus पर plaintext में क्यों घूम रहा है? key exchange protocol जैसा कुछ भी नहीं है
[1] यहां secure erase की बात भी आती है, और वह तो और भी कमजोर case है. लेकिन अगर full-disk encryption में ऐसा EEPROM हो जिसे socket से निकालकर physically destroy किया जा सके, तो वह हिस्सा भी उतनी ही effective तरह से solve हो जाता है
जानना चाहता हूं कि raw signal को 0 और 1 में बदलने के लिए कौन-सा software इस्तेमाल किया गया. पहले से एक similar project था: 80s की cassette tape से digital data पढ़ना. tape की
.wavfile काफी अच्छी तरह मिल गई, लेकिन इसे 0 और 1 में बदलने के लिए अभी तक कोई सही tool या library नहीं मिलीअसली मजा तो, जाहिर है, 0 और 1 को decode करना शुरू करने के बाद आएगा. मुझे पता है कि bits कैसे encoded हैं, और यह frequency-shift keying[0] है. जो नहीं पता वह यह है कि इसे ऐसे bit stream में decode करने के लिए क्या इस्तेमाल करूं जिसे मैं आगे process कर सकूं
[0] https://en.wikipedia.org/wiki/Frequency-shift_keying
ऐसे filters की एक pair के outputs को compare करके digital output बनाया जा सकता है. sparse sliding discrete Fourier transform भी इस्तेमाल कर सकते हैं, लेकिन frequency bins के बीच interpolation ज्यादा झंझट वाला है, जबकि Goertzel filter वह काम आपके लिए कर देता है
मुझे ऐसा कोई single algorithm या software नहीं पता जो किसी भी raw signal को bytes में बदल दे. आपको समझना होगा कि signal कौन-सा modulation scheme इस्तेमाल करता है, और फिर उसका decoder ढूंढना या खुद लिखना होगा. आम तौर पर इसमें filtering और कई mathematical algorithms लगते हैं, लेकिन basic decoding के programs काफी छोटे और simple होते हैं
सीखने लायक काफी शानदार skill है, क्योंकि वही techniques हर तरह की जगहों पर काम आती हैं. जैसे, थोड़ा DSP सीखने के बाद मेरे लिए wireless communication, music और sound design, images, और video processing में बहुत कुछ करने के रास्ते खुल गए
या फिर लेखक ने DSlogic का जिक्र किया है, तो उस logic analyzer के manufacturer द्वारा बनाए गए उन programs का fork भी हो सकता है
raw signal आम तौर पर stable edge के लिए hysteresis implement करने हेतु Schmitt trigger में जाता था. इससे tape signal की polarity और motor drift compensate हो जाते थे
“अलग physical TPM इस्तेमाल करने से वास्तव में security घटती है” वाला हिस्सा ironic है
2015 में मेरे laptop में physical TPM नहीं था, और enable करने की कोशिश की तो “Allow BitLocker without a compatible TPM (requires a password or startup key on a USB flash drive)” दिखा, इसलिए मुझे लगा कि यह कम secure है. अच्छा हुआ कि मैंने वैसे भी BitLocker इस्तेमाल नहीं किया
यह बहुत हंसी की बात है कि Windows Vista के जमाने वाला primary-school-level trick, जिसमें command prompt का नाम accessibility handler में बदल देते हैं, आज भी वैसे ही काम करता है
अगर कुछ login के बिना administrator privileges के साथ run होता है, तो कल्पना होती है कि Windows authentication करेगा, लेकिन Windows का 75% security theatre है और बाकी 25% भी किसी और तरह का theatre लगता है
2021 में यही technique समझाई गई थी:
https://dolosgroup.io/blog/2021/7/9/from-stolen-laptop-to-in...