1 पॉइंट द्वारा GN⁺ 2023-08-25 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • अगर बिना पासवर्ड वाला BitLocker discrete TPM पर निर्भर करता है, तो बूट के दौरान TPM से CPU तक VMK भेजे जाने के पल SPI बस पर plaintext key कैप्चर की जा सकती है
  • Lenovo L13 पर किया गया प्रयोग 100 डॉलर से कम कीमत वाले DSLogic Plus से किया गया, लेकिन 33MHz SPI बस को स्थिर रूप से पढ़ने के लिए इसकी sampling limit बड़ी बाधा रही
  • कैप्चर किए गए डेटा को SPI → TIS → TPM 2.0 क्रम में समझना पड़ता है, और TPM2_Unseal response 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 24 header और TPM bytes भेजता है
    • slave 01 FF से पुष्टि करता है कि पढ़ लिया गया है
  • slave से master की ओर आने वाले responses register setup और read पर निर्भर करते हैं
    • उदाहरण frame D4 00 24 address से 1 byte पढ़ने का परिणाम है
    • slave 80 के साथ transaction शुरू करता है, और उसके बाद रुचि का मान 0x80 दिखाई देता है

TPM2_Unseal response में key ढूंढना

  • key return करने का अनुरोध करने वाला TPM command TPM2_Unseal है
  • request frames की तुलना में MISO line के responses पर ध्यान देकर TPM transactions अलग किए गए
    • raw SPI data में 80 00 00 00 01 .. mask से filter किया गया और केवल आखिरी wildcard byte रखा गया
    • TPM transaction की शुरुआत 80 01 या 80 02 header से पहचानी गई
    • key वाला response लंबा authenticated response था और 80 02 से शुरू होता था
  • Unseal command और response के बीच लगभग 10ms delay था
    • 80 02 header password session को दर्शाता है, जो अधिकांश requests के plaintext 80 01 header से अलग है
    • संभव है कि 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 टिप्पणियां

 
GN⁺ 2023-08-25
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...

    • यह असल में ठीक-ठाक man-in-the-middle हमला भी नहीं है, बस passive sniffing जैसा है
      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 की जरूरत ही नहीं रहेगी
    • सोच रहा हूं कि यह omission intentional है या नहीं, और अगर है तो वजह क्या है
    • authenticated sessions, जब तक device पूरी तरह integrated न हो, practically लगभग बेकार हैं। SRK identity की guarantee देने का कोई तरीका नहीं है, इसलिए man-in-the-middle attack फिर भी संभव है
  • 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 हो

    • recovery key की copy कहीं रखना अच्छी habit है
    • शायद यह सिर्फ simple tamper switch button पर depend करता होगा, और पीछे के plastic को काटकर आसानी से bypass किया जा सकता होगा। लगता नहीं कि उन्होंने पूरे case में wiring फैला देने जैसा कोई sophisticated mechanism लगाया होगा
    • consumer devices में chassis intrusion detection को default on देखा हो, ऐसा याद नहीं। यह शायद corporate account से bulk order product रहा होगा। ऐसे products IT department की desired settings के साथ ship हो सकते हैं
    • क्या मतलब laptop के screws खोलकर अंदर access करने से है?
      शायद plastic काटकर भी access किया जा सकता है। Matrix में parasite extraction scene जैसे तरीके से
    • आजकल upgradeable RAM वाले laptops ढूंढना मुश्किल है, यही मजाक की बात है। कुछ ThinkPad lines भी ऐसी हैं, और gaming laptops में अक्सर संभव होता है
  • इसमें नया कुछ नहीं है। 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...

    • दिलचस्प है कि मेरी जानकारी में Windows Defender अब default रूप से accessibility-based privilege escalation attacks को रोकता है। Behavior:Win32/AccessibilityEscalation
    • मुझे उम्मीद थी कि TPM X बार failed attempts होने पर key material wipe कर देगा, क्या ऐसा नहीं है?
  • BitLocker और इस तरह की 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 में भी हमेशा ऐसा ही किया है। क्या मेरी सोच पूरी तरह गलत है?

    • attacker को login bypass करना होगा, system memory से key extract करनी होगी, या physical TPM होने पर इस article जैसे तरीके का attack करना होगा। यह किसी महंगे computer को चुराकर जल्दी पैसे बनाने वाले आम चोर की तुलना में काफी ज्यादा sophisticated attack होने की संभावना है
      आम तौर पर वे 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 करना चाहे तो वैसे भी कर सकता है
    • पूरी तरह गलत नहीं है, लेकिन हो सकता है आप key को exportable हो जाने के risk को miss कर रहे हों
      जैसा आपने कहा, अगर 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
    • Windows को सही account password डालने से पहले किसी को भी files access नहीं करने देना चाहिए। इसलिए इस computer पर disk decrypt तो होती है, लेकिन उसके बाद Windows access block करता है
    • मेरा अनुमान है कि अगर disk encryption में password set नहीं किया है, तो उस scenario में protection नहीं होगा
  • अगर key किसी shared bus से गुजरती है, तो क्या इसका मतलब है कि system का कोई भी component इस logic analyzer की तरह आसानी से key intercept कर सकता है? यह supply-chain security nightmare जैसा लगता है

    • इस तरह की encryption का मकसद यह है कि अलग की गई hard drive को data risk के बिना बेचा या reuse किया जा सके
      अगर कोई भी laptop boot करके decrypted hard drive तक पहुंच सकता है, तो पहले key sniff करने से क्या फर्क पड़ता है? अगर आप laptop boot कर सकते थे, तो वैसे भी final output तक पहुंच सकते थे
    • कुछ components के बीच shared होता है, लेकिन बिल्कुल सभी में नहीं. आजकल आम तौर पर SPI bus पर सिर्फ boot flash, TPM, और bus master यानी CPU खुद जुड़ा होता है
  • अगर आप चाहते हैं कि laptop चोरी होने की स्थिति में BitLocker आपकी रक्षा करे, तो वैसे भी आपको password इस्तेमाल करना होगा और sleep mode को बंद करना होगा, hibernate नहीं

    • पहला point इस लेख से पहले पूरी तरह clear नहीं था. laptop theft उन threats में practically सबसे कमजोर[1] category है जहां full-disk encryption मायने रखती है, और Windows ने इस बात को खूब highlight किया है कि वह normal account password के अलावा कुछ नहीं मांगता
      तो 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 की .wav file काफी अच्छी तरह मिल गई, लेकिन इसे 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

    • पुराने FSK tape decoding के लिए sliding Goertzel filter देखना अच्छा रहेगा. यह implement करने में आसान filter है, sliding window के अंदर किसी specific frequency bin का amplitude निकालता है, और DTMF decoding literature में अक्सर इसका जिक्र आता है
      ऐसे filters की एक pair के outputs को compare करके digital output बनाया जा सकता है. sparse sliding discrete Fourier transform भी इस्तेमाल कर सकते हैं, लेकिन frequency bins के बीच interpolation ज्यादा झंझट वाला है, जबकि Goertzel filter वह काम आपके लिए कर देता है
    • यह digital signal processing नाम का बड़ा field है, और मूल रूप से modem या sound card का analog-to-digital converter यही करता है
      मुझे ऐसा कोई 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 में बहुत कुछ करने के रास्ते खुल गए
    • लेख पढ़कर तो आसान लगता है. clock जब low से high पर बदलता है, उस समय data line का current level bit value है, और starting point खोजने के लिए एक 1 और सात 0 ढूंढने होंगे
    • Pulseview https://github.com/sigrokproject/pulseview और Sigrok project के दूसरे हिस्से https://github.com/sigrokproject देखे जा सकते हैं
      या फिर लेखक ने DSlogic का जिक्र किया है, तो उस logic analyzer के manufacturer द्वारा बनाए गए उन programs का fork भी हो सकता है
    • उस दौर के loading routines बस DC zero crossing की गिनती करते थे: X crossings हों तो 0, Y crossings हों तो 1, frequency या amplitude की परवाह नहीं करते थे
      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...