9 पॉइंट द्वारा GN⁺ 2025-06-30 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Malware वर्चुअल वातावरण में चलने से बचने के लिए CPU fan जैसे हार्डवेयर की मौजूदगी जांचते हैं
  • CPU fan की जानकारी WMI के Win32_Fan class के जरिए देखी जा सकती है, और यह डेटा SMBIOS में संग्रहीत होता है
  • Xen में custom SMBIOS डेटा inject करने के लिए patch और अलग configuration की ज़रूरत होती है, और Cooling Device(Type 27) तथा Temperature Probe(Type 28) दोनों tables को configure करना पड़ता है
  • QEMU/KVM में अलग patch के बिना -smbios option से आसानी से custom SMBIOS लागू किया जा सकता है
  • इससे virtual machine को ऐसा दिखाया जा सकता है मानो उसमें CPU fan मौजूद हो, ताकि malware की detection को bypass करने की कोशिश की जा सके

यह काम क्यों किया जाता है?

  • कुछ malware यह जांचने की कोशिश करते हैं कि वे virtual environment में चल रहे हैं या नहीं, इसके लिए वे विशिष्ट hardware (जैसे CPU fan) की मौजूदगी देखते हैं
  • वे Win32_Fan जैसी WMI classes से hardware की जांच करते हैं, और अगर यह जानकारी न मिले तो उसे virtual machine मानकर execution से बचते हैं
  • इसका उद्देश्य analysts को malware का analysis करने से रोकना होता है
  • Win32_CacheMemory, Win32_VoltageProbe जैसी कई WMI classes मौजूद हैं, लेकिन इस लेख में CPU fan पर फोकस किया गया है

कंप्यूटर को CPU fan होने का पता कैसे चलता है?

  • कंप्यूटर SMBIOS जानकारी पढ़कर cooling device (CPU fan) की मौजूदगी पहचानता है
  • Win32_Fan instance cimwin32.dll से उपलब्ध होता है, और यह DLL SMBIOS के type 27 entry से fan की जानकारी पढ़ती है
  • DLL hooking जैसी विधियाँ भी संभव हैं, लेकिन SMBIOS को सीधे बदलना बेहतर तरीका है

SMBIOS Type 27

  • SMBIOS type 27 का अर्थ "Cooling Device" है
  • SMBIOS के Cooling Device डेटा को dmidecode utility से सीधे देखा जा सकता है
  • उदाहरण:
    • Type: Chip Fan
    • Status: OK
    • Description: CPU Fan
    • Nominal Speed: 5600 rpm आदि

Xen में custom SMBIOS डेटा सेट करने का तरीका

  • Xen में domain configuration file के smbios_firmware option का उपयोग करके binary रूप में SMBIOS डेटा सीधे निर्दिष्ट किया जा सकता है
  • smbios.bin फ़ाइल बनाकर उसमें Cooling Device(type 27) डेटा डाला जा सकता है
  • SMBIOS structure का size (जैसे 24 bytes) 32-bit little-endian integer के रूप में आगे जोड़ना पड़ता है

समस्या: structure override की सीमा

  • Xen केवल 0, 1, 2, 3, 11, 22, 39 नंबर के structures को overwrite करने की अनुमति देता है
  • type 27 डिफ़ॉल्ट रूप से allowed नहीं है, इसलिए source patch की ज़रूरत होती है
  • Xen developer forum में संबंधित patch प्रस्तावित किया गया था, लेकिन उसे आधिकारिक रूप से स्वीकार नहीं किया गया (इसलिए patch लागू करके build करना पड़ता है)

Type 28 भी ज़रूरी है

  • Cooling Device(type 27), Temperature Probe(type 28) से जुड़ा होता है
  • अगर SMBIOS में type 28 entry न हो, तो Win32_Fan class में यह सामान्य रूप से दिखाई नहीं देता
  • सही पहचान के लिए host system का type 28 डेटा लेकर उसे smbios.bin में जोड़ना पड़ता है

अंतिम smbios.bin संरचना

  • इसमें Type 27 और Type 28 दोनों डेटा शामिल होते हैं
  • हर structure के आगे size जानकारी (little-endian) डाली जाती है
  • उदाहरण: 18 00 00 00 ... (type 27) ... 29 00 00 00 ... (type 28) ... जैसा रूप

Xen में लागू करना और सत्यापित करना

  • domain creation command से Windows virtual machine boot करने के बाद WMI में Win32_Fan class सही पहचानी जा रही है या नहीं, यह जांचा जा सकता है
  • Description: Cooling Device, Status: OK दिखने पर CPU fan की पहचान सफल मानी जाती है

QEMU/KVM में SMBIOS डेटा सेट करना

  • QEMU/KVM में -smbios file=पथ option से आसानी से custom SMBIOS सेट किया जा सकता है
  • इसमें structure size जानकारी के बिना केवल raw data का उपयोग होता है
  • host के SMBIOS डेटा को ज्यों का त्यों उपयोग करना भी संभव है

संदर्भ सामग्री

  • Xen domain configuration file documentation, mcnewton के setup notes, rejected Xen patch archive, System Management BIOS Reference, QEMU Anti Detection patch आदि

1 टिप्पणियां

 
GN⁺ 2025-06-30
Hacker News राय
  • एक नए anti-malware तरीके के रूप में passive cooling PC खरीदने का भी ज़िक्र है, और Russian keyboard सेट करना भी scammy malware को रोकने की एक टिप बताई गई है, संबंधित लिंक देखा जा सकता है

    • मैं वास्तव में Streacom FC8 Evo passive cooling Linux PC और Russian keyboard इस्तेमाल करता हूँ, लेकिन dmidecode कमांड से देखने पर cooling device की जानकारी अब भी मौजूद है और cooling device वास्तव में detect भी हो रही है, sensor data से temperature की जानकारी भी देखी जा सकती है

    • passive cooling PC इस्तेमाल करने पर भी motherboard में आमतौर पर fan header बचे रहते हैं, इसलिए वास्तव में कुछ connected न होने पर भी बहुत बड़ा फ़र्क नहीं होगा, ऐसा मत है

  • “smol pp” जैसी भाषा का इस्तेमाल न करने की बात, यानी शरीर का मज़ाक उड़ाने वाली भाषा की ओर इशारा

    • मेरे शहर में “SML PP” custom number plate वाला एक व्यक्ति है, क्यों है यह पता नहीं

    • “हमारी भाषा” जैसा expression इस्तेमाल करते हुए भी, blog comment section में मौजूद कोई व्यक्ति ‘हम’ कहे तो वह खुद में काफ़ी अस्पष्ट है, ऐसा मत

  • अगर operating system को ऐसा दिखाया जाए मानो वह virtual machine हो, तो security बढ़ सकती है और researchers को मदद मिल सकती है; non-virtualized access चाहिए तो अनिवार्य रूप से authorization लेना पड़े, और इससे malware, researcher analysis से बचने के लिए, सामान्य users को भी target न करे; नतीजतन malware बनाने वालों को छोड़कर बाकी सबको फ़ायदा होगा, ऐसा तर्क

    • सामान्य operating system को VM जैसा दिखाने की बात नहीं, बल्कि virtual machine को ही ऐसा बना देना कि उसे पता न चले कि वह virtualized है; IBM के lpars system ऐसे ही काम करते हैं, ऐसा मत

    • इस तरीके से anti-cheat software कंपनियों को भी नुकसान होगा, ऐसा ज़िक्र; मैं चाहता हूँ कि मेरा software कहाँ चल रहा है यह मुझे साफ़ पता हो, लेकिन cheating से भी ज़्यादा cheaters से नफ़रत करने वाले multiplayer users भी बहुत हैं, इसलिए व्यवहारिक रूप से बदलाव आसान नहीं होगा, ऐसा मत

    • mobile development की दुनिया में यह framework पहले से ही हक़ीक़त बन चुका है, ऐसा मत

  • मैंने अब तक consumer motherboard में SMBIOS description को असली hardware से मेल खाते हुए शायद ही कभी देखा है; ऐसा SMBIOS check करने वाला malware असली hardware के 50% पर fail कर सकता है, लेकिन अगर वह 100% VM या debugger पर पक्का रुक जाए, तो malware के नज़रिए से fail होने पर भी यह काफ़ी क़ीमती हो सकता है; फिर भी, इस approach से ज़्यादा time measurement द्वारा जाँच करना शायद अधिक reliable होगा, ऐसा अनुमान

    • SMBIOS description का असली hardware से न मिलना खासकर सस्ते Chinese boxes में ज़्यादा गंभीर है; “to be filled in by OEM” जैसे unfilled values असली live BIOS image में coding के समय अक्सर दिखते हैं, इसलिए सिर्फ़ ऐसे values से भी स्थिति काफ़ी हास्यास्पद लगती है, ऐसा feedback

    • malware में bugs भी बहुत होते हैं; जैसे पहले network code में bug होने से virus अपनी मूल मंशा की तुलना में आधी रफ़्तार से फैला था, उसी तरह malware अगर हर device को infect न भी करे, तब भी भारी नुकसान पहुँचा सकता है

    • आजकल Linux fan को कैसे पहचानता है, यह जानने की जिज्ञासा; ACPI या EFI का उपयोग करता है या नहीं, पता नहीं, और मेरे ज़्यादातर devices में fan/sensor सही तरह detect हो रहे हैं, ऐसा सवाल

    • यह SMBIOS check वास्तव में असली malware करता है या सिर्फ़ researcher द्वारा बनाए गए sample में ही इस्तेमाल होता है, यह जानने की जिज्ञासा

  • malware अगर analysis को मुश्किल बनाने के लिए API tricks इस्तेमाल करे तो वह प्यारा लग सकता है, लेकिन ज़्यादातर ऐसे API calls static analysis में आसानी से detect हो जाते हैं, और अगर binary obfuscated न हो तो उलटा नुकसान होता है, ऐसा मत; सचमुच उद्देश्यपूर्ण programs आमतौर पर trusted CA signature लेकर distribute होते हैं, इसलिए security analysis में वे suspicious behavior के रूप में अच्छी तरह पकड़े जाते हैं, ऐसा अनुभव साझा; junior दिनों में regex pattern से ऐसे API usage पकड़ने का काम भी किया था, और बड़े पैमाने पर फैले basic malware को पकड़ने में यह काफ़ी असरदार था

    • हाल के समय में malware भी काफ़ी बार files पर sign करता है; अब यह उम्मीद ग़लत है कि malware बनाने वाले binaries पर sign नहीं करेंगे; stolen code-signing certificates आम हैं, और Microsoft मौजूदा customer software टूटने के डर से certificate revocation को लेकर हिचकिचाता है, यह भी ज़िक्र; malware के kernel में घुसने के लिए vulnerable drivers के इस्तेमाल के मामले भी बहुत हैं; इसलिए WMI calls करने वाली suspicious छोटी binary की तुलना में, vulnerabilities से भरी overclocking utility वही query करे तो कोई ज़्यादा शक नहीं करता; वास्तव में इस तरीके का उद्देश्य detection evasion से ज़्यादा analyst PC पर malware payload को activate न होने देना है; detect हो जाने पर second-stage payload नहीं उतारा जाता और वास्तविक हमला करने लायक C&C behavior रोक कर रखा जाता है

    • security के नज़रिए से क्या सारा software VM में चलाना बेहतर नहीं होगा, ऐसा सुझाव

    • antivirus का सिर्फ़ static analysis के आधार पर malware होने का अनुमान लगाना भी अस्पष्ट है; फिर तो सीधे whitelist approach अपनाकर सिर्फ़ trusted software को अनुमति दें और बाकी सबको malware मान लें, तो परिणाम लगभग वही होगा, ऐसा तर्क

    • CrowdStrike जैसी कंपनियों का kernel-level पर चलने वाला घटिया software आधिकारिक रूप से signed होता है और system calls सब करता है फिर भी कोई परवाह नहीं करता; VM हो या न हो, सीधे production में unverified code और releases डाल दिए जाते हैं, और जब सचमुच दुनिया भर में गड़बड़ी होती है, flights delay होती हैं या critical infrastructure पर असर पड़ता है, तब भी जिम्मेदारी ठीक से नहीं ली जाती, यह समस्या; बल्कि वैध कंपनियाँ ही hackers या nation-state attackers से भी बड़ा नुकसान पहुँचा सकती हैं, ऐसी आलोचना; xz utility घटना भी SolarWinds, ClownStrike के बराबर की बड़ी security incident थी, ऐसा मत

  • मैंने infosec industry के एक दोस्त को malware honeypot को असली hardware के लगभग पूरी तरह समान बनाने में अपना ज़्यादातर समय लगाते देखा है; Windows XP आधारित thermostat से लेकर Siemens PLC controller और banking desktop तक, बहुत तरह के devices को बेहद बारीकी से सेट करते देखना चौंकाने वाला था

    • उम्मीद है दुनिया में Windows XP पर चलने वाले thermostat वास्तव में न हों
  • Hackintosh सेट करते समय उपयुक्त SMBIOS का अनिवार्य होना याद आया; पिछले कई दशकों में कई अपेक्षाकृत minor PC APIs आए, और virtualization software या malware में इन हिस्सों को कितना ठीक से reflect किया गया है, यह परखने में उनका अक्सर उपयोग होता है; एक कदम आगे जाने के लिए, असली CPU load के अनुसार dynamically बदलने वाली temperature sensor simulation भी चाहिए होगी, ऐसा विश्लेषण

  • Mitre ATT&CK T1497.001 (VM Detection) के अनुसार SMBIOS check एक ज्ञात vector है; मैंने भी प्रयोग किया तो power supply को HotReplaceable=Yes, Status=OK सेट करके उसे $5,000 वाले bare-metal server जैसा दिखा सका; इस्तेमाल किया गया कमांड है pip install dmigen के बाद dmigen -o smbios.bin --type0 vendor="American Megatrends",version="F.1" --type1 manufacturer="Dell Inc.",product="PowerEdge T630" --type39 name="PSU1",location="Bay 1",status=3,hotreplaceable=1

    • संदर्भ के लिए, Hacker News में वास्तविक line break देने के लिए दो या उससे ज़्यादा newline डालना, या हर पंक्ति को दो spaces indent करके code mode में लिखना पड़ता है, यह टिप