
Linux, Windows और macOS पर फ़ाइल-सूचना साइड-चैनल हमलों के लिए शोध आर्टिफ़ैक्ट्स, जो inotify/FSEvents लीकेज, कीस्ट्रोक टाइमिंग और वेबसाइट फ़िंगरप्रिंटिंग का प्रदर्शन करते हैं।
यह रिपॉज़िटरी पेपर "File Notification Attacks: Templating and Exploiting Side-Channel Leakage from the File-Notification Systems on Linux, Windows, and macOS" के लिए (अभी भी समीक्षा में!) आर्टिफ़ैक्ट्स को समाहित करती है, जिसे CCS '26 में स्वीकार किया गया है।
डेमो के साथ वेबसाइट देखें: https://inoti.fyi/
पेपर पढ़ें: https://snee.la/pdf/pubs/file-notification-attacks.pdf या http://inoti.fyi/pubs/file-notification-attacks.pdf
CCS'26 में आर्टिफ़ैक्ट मूल्यांकन (अभी भी जारी!) के एक भाग के रूप में, हमने एक Debian 13 + KDE Plasma 6 VM भेजा है जिसमें एक पहले से पैच किया गया कर्नेल है। इस VM का उपयोग पेपर के मूल्यांकन परिणामों को उत्पन्न करने के लिए नहीं किया गया था और इसका उद्देश्य उनके सटीक परिमाण को पुन: उत्पन्न करना नहीं है। इस रिपॉज़िटरी को हमारे आर्टिफ़ैक्ट मूल्यांकनकर्ताओं की समीक्षाओं और प्रतिक्रिया को शामिल करने के लिए अद्यतन किया जा सकता है। जब हमारा आर्टिफ़ैक्ट मूल्यांकन पूरा हो जाएगा, तो हम VM को सार्वजनिक रूप से सुलभ बना देंगे।
हमने अपने कोड को अच्छी तरह से प्रलेखित और उच्च-प्रदर्शन वाले आर्टिफ़ैक्ट्स में लपेटने के लिए Claude (Opus 4.8) का उपयोग किया (उदाहरण के लिए, Windows वाला थोड़ा धीमा था)। हालाँकि, इसके द्वारा उत्पन्न कोड, स्क्रिप्ट, मेकफ़ाइल आधारित थे
नीचे दिए गए Linux कोड के परीक्षण के निर्देश VM में कमांड चलाने के लिए विशिष्ट हैं। कृपया इसके बजाय Linux/ में कोड देखें।
VM विशुद्ध रूप से सुविधा के लिए मौजूद है, ताकि प्रत्येक हमले को माउंट करने के लिए शुरू से पर्यावरण सेटअप या कर्नेल डाउनग्रेड की आवश्यकता न हो। VM में प्रदर्शित अंतर्निहित तंत्र पेपर में वर्णित तंत्र के समान है, लेकिन कृपया ध्यान दें कि हमने पेपर में रिपोर्ट किए गए आंकड़ों को उत्पन्न करने के लिए VM का उपयोग नहीं किया था। वर्चुअलाइज़्ड वातावरण और अंतर्निहित हार्डवेयर के कारण पूर्ण समय भिन्न हो सकता है।
निष्कर्षों को Debian 13 VM (linux-vm/) के अंदर पुन: उत्पन्न किया जाता है, जिसे आधिकारिक लाइव Debian ISO से KDE Plasma 6 (Wayland) के साथ स्थापित किया गया है, जिसमें एक कर्नेल है जो fsnotify फ़िक्स से पहले का है। inotify-tools, Qt6 dev headers, और pkexec स्थापित हैं। और कुछ भी अपग्रेड नहीं किया गया है, और स्थापना के बाद कर्नेल को कभी छुआ नहीं जाता है। कृपया apt upgrade न चलाएँ या कर्नेल को अपग्रेड करने का प्रयास न करें। यह VM इमेज जानबूझकर पुरानी है, अद्यतित नहीं है, और इसमें नवीनतम सुरक्षा पैच नहीं हैं। यह VM इमेज केवल त्वरित सत्यापन और परीक्षण के लिए है!
VM के भीतर स्थित कोड, हमले, और प्रदर्शन Linux/ में प्रतिबिंबित हैं।
नोट: हम प्रत्येक कमांड ब्लॉक के शीर्ष पर उल्लेख करते हैं कि कमांड किस उपयोगकर्ता के रूप में चलानी है। [host] है, जो VM चलाने वाली होस्ट मशीन है, [user] जो VM में हमलों का शिकार है, और [spyuser] जिसे सेटअप करने की आवश्यकता है और अधिकांश Linux हमलों में हमलावर होगा।
डिस्क इमेज linux-vm-upload.qcow2 के रूप में भेजी जाती है, जिसे zstd से संपीड़ित किया गया है। run.sh चलाने से पहले इसका नाम बदलकर linux-vm.qcow2 करें (जो उस फ़ाइल नाम की अपेक्षा करता है):
# Run As: [host]
cd linux-vm/
mv linux-vm-upload.qcow2 linux-vm.qcow2
./run.sh
zstd-संपीड़ित qcow2 पढ़ने के लिए qemu-img/qemu-system-x86_64 संस्करण 5.2 या नया (2020+) आवश्यक है, qemu-img --version से जाँचें। यदि आप पुराने QEMU पर अटके हुए हैं और यह इमेज खोलने में विफल रहता है, तो पहले इसे एक फ्लैट qcow2 में डीकंप्रेस करें:
qemu-img convert -O qcow2 linux-vm-upload.qcow2 linux-vm.qcow2
4 कोर, 4GB RAM, GUI डिस्प्ले। लॉगिन हैं:
root, पासवर्ड password,user, पासवर्ड password,spyuser, पासवर्ड password (spyuser के रूप में लॉगिन न करें!)आपूर्त किया गया VM पहले से ही एक कमजोर, पहले से पैच किया गया कर्नेल (6.12.43+deb13-amd64) चलाता है, इसलिए इसका उपयोग करने के लिए किसी डाउनग्रेड की आवश्यकता नहीं है। इस इमेज को चलाने के लिए आपको QEMU की आवश्यकता होगी (जिसमें GUI है)। आर्टिफ़ैक्ट VM के अंदर /home/user/Linux-File-Notification-Attacks पर स्थित है।
एक कमांड VM में चीज़ों को नए सिरे से सेट करता है: (i) एक गैर-विशेषाधिकार प्राप्त spyuser खाता (गैर-sudo), (ii) आर्टिफ़ैक्ट निर्देशिका की अपनी प्रति (एक अलग गैर-विशेषाधिकार प्राप्त खाता अन्यथा user की होम निर्देशिका में प्रवेश नहीं कर सकता), (iii) और दोनों प्रतियों में प्रत्येक स्क्रिप्ट को निष्पादन योग्य बनाया गया।
# In the VM, Run As: [user]
sudo bash ~/Linux-File-Notification-Attacks/setup_attacks.sh
नीचे दिए गए प्रत्येक हमले spyuser के रूप में चलते हैं (su - spyuser, पासवर्ड password), सिवाय auth-ui-redress के, जो user के रूप में चलता है (नीचे समझाया गया है)।
साबित करता है कि फ़ाइल-संचालन सूचनाएँ उन फ़ाइलों पर दी जाती हैं जिन्हें सीधे पढ़ा नहीं जा सकता, जब तक कि उनकी मूल निर्देशिका पठनीय हो।
# Run As: [spyuser]
# To switch to spyuser, in a new terminal type `su - spyuser`. The password
# is `password`.
cd ~/Linux-File-Notification-Attacks/unreadable-file-bypass
./watch-syslog.sh
इसे चलने दें, फिर user के रूप में किसी अन्य टर्मिनल से एक लॉग लाइन उत्पन्न करें:
# Run As: [user]
logger "hello"
इस Debian 13 इमेज में rsyslog नहीं है, इसलिए पेपर में दिखाए गए अनुसार कोई /var/log/syslog फ़ाइल नहीं है। स्क्रिप्ट इसके बजाय /var/log/journal/<machine-id>/ की निगरानी पर वापस आ जाती है। यह वही विचार है, क्योंकि निगरानी की जा रही .journal फ़ाइलें root (उपयोगकर्ता) और systemd-journal (समूह) के स्वामित्व में हैं, जिनमें से कोई भी spyuser नहीं है।
inotify की अधिसूचना विलंबता को मापता है।
# Run As: [user], ensure numpy is installed (or pip3)
sudo apt install python3-numpy
# Run As: [spyuser]
cd ~/Linux-File-Notification-Attacks/temporal-resolution
./run.sh
watcher एक परीक्षण फ़ाइल पर एक inotify वॉच खोलता है और प्राप्त प्रत्येक IN_ACCESS को टाइमस्टैम्प करता है। accessor उसी फ़ाइल को 1000 बार पढ़ता है, पढ़ने के बीच यादृच्छिक 5-10ms विलंब के साथ, प्रत्येक पढ़ने को स्वयं टाइमस्टैम्प करता है। stats.py दो टाइमस्टैम्प रिकॉर्डिंग का अंतर निकालता है और पढ़ने के होने और अधिसूचना आने के बीच औसत/stddev/min विलंब प्रिंट करता है, अर्थात inotify का टेम्पोरल रेज़ोल्यूशन।
पेपर से पूरा हमला नहीं, बल्कि केवल फ़िल्टरिंग प्रूफ-ऑफ-कॉन्सेप्ट प्रिमिटिव जिस पर हमला बनाया गया है: सिस्टम पर कहीं भी दबाए गए प्रत्येक कुंजी के लिए, एक टाइमस्टैम्प्ड अधिसूचना प्रिंट करें, बिना कभी सीधे /dev/input पढ़े।
# Run As: [spyuser]
cd ~/Linux-File-Notification-Attacks/inter-keystroke-timing
make
./find-keyboard.sh
किसी भी विंडो में टाइप करें (शायद user के रूप में एक नया टर्मिनल)। प्रत्येक कीस्ट्रोक एक KEYPRESS लाइन प्रिंट करता है। दमन विंडो (जिसे हमने इस प्रदर्शन के लिए अनुमानित रूप से 130ms चुना है) एक भौतिक कुंजी दबाने से उत्पन्न कई IN_ACCESS इवेंट्स को मर्ज करती है। व्यवहार में, हमने देखा है कि यह विंडो विभिन्न हार्डवेयर (जैसे, मैकेनिकल कीबोर्ड, टाइपिंग शैलियाँ) के लिए भिन्न होती है।