
आपकी फ़ाइलों में Unicode BIDI वर्णों की उपस्थिति की जाँच करता है, जिनका उपयोग सप्लाई चेन हमलों के लिए दुरुपयोग किया जा सकता है। CVE-2021-42574 देखें।
यह टूल आपकी फ़ाइलों में यूनिकोड BIDI कैरेक्टर की उपस्थिति की जाँच करता है जिनका दुरुपयोग सप्लाई चेन हमलों के लिए किया जा सकता है, CVE-2021-42574 को कम करने के लिए। यह टूल Rust में लिखा गया है और एक छोटे (< 3MB) डॉकर संगत कंटेनर के रूप में वितरित किया जाता है ताकि तेज और आसान उपयोग किया जा सके।
हमले की व्याख्या के लिए, GitHub के ब्लॉग एंट्री या मूल पेपर पर नज़र डालें जहाँ हमला प्रकाशित किया गया था।
यह पैकेज मुख्य रूप से इसके डॉकर कंटेनर के माध्यम से उपयोग के लिए है। लेकिन स्थानीय इंस्टॉलेशन भी संभव है।
संकलन के लिए कम से कम Rust 1.56.0 की आवश्यकता है क्योंकि यह Rust 2021 Edition का उपयोग करता है।
इस रिपॉजिटरी को क्लोन करें और अपने वर्तमान उपयोगकर्ता के लिए बाइनरी इंस्टॉल करने के लिए cargo install --path . चलाएँ। उसके बाद, आप bidi_detector कमांड का उपयोग कर सकते हैं।
आधिकारिक डॉकर कंटेनर के माध्यम से टूल चलाना शुरू करने का संभवतः सबसे आसान तरीका है। इसे डॉकर के माध्यम से चलाने के लिए, निम्नलिखित कमांड आपकी वर्तमान कार्यशील निर्देशिका के अंदर सभी फ़ाइलों को स्कैन करने के लिए काम करना चाहिए:
docker run --rm -it -v $(pwd):/data ghcr.io/maweil/bidi_char_detector:latest
आपके सिस्टम के अनुसार इस कमांड में थोड़ा बदलाव करना पड़ सकता है। यदि आप उदाहरण के लिए podman का उपयोग करते हैं और SELinux सक्षम है, तो इसके बजाय निम्नलिखित कमांड आज़माएँ:
podman run --rm -it -v $(pwd):/data:Z ghcr.io/maweil/bidi_char_detector:latest
डिफ़ॉल्ट रूप से, सभी फ़ाइलों की जाँच की जाएगी। यदि आपके वर्तमान निर्देशिका में बाइनरी फ़ाइलें हैं, तो कमांड विफल हो जाएगा क्योंकि यह गैर-UTF8 एन्कोडेड फ़ाइल को डिकोड नहीं कर सकता।
कमांड को अपनी आवश्यकताओं के अनुसार अनुकूलित करने के लिए, अपने प्रोजेक्ट की रूट में bidi_config.toml नामक एक फ़ाइल रखें।
आप इस रिपॉजिटरी में इसका एक उदाहरण पा सकते हैं, नीचे एक उदाहरण देखें। विकल्पों का विवरण उदाहरण के नीचे दिया जाएगा:
[general]
includes = [
"src/**/*",
"**/*.patch",
"**/*.json",
"**/Dockerfile",
"test/*.js"
]
excludes = [
".git/*",
"target/*"
]
[display]
show_details = true
इस अनुभाग में दो ऐरे (includes और excludes) शामिल हैं जहाँ आप स्कैन की जाने वाली फ़ाइलों के पैटर्न निर्दिष्ट कर सकते हैं (या स्कैन से बाहर करने के लिए)।
कृपया सुनिश्चित करें कि आपके पैटर्न वास्तव में निर्देशिका के अंदर की फ़ाइलों से मेल खाते हैं, न कि निर्देशिका के नाम से, अन्यथा आपकी फ़ाइलें स्कैन नहीं होंगी।
यदि आप सभी फ़ाइलों को स्कैन करना चाहते हैं और केवल उदाहरण के लिए अपनी .git निर्देशिका को बाहर करना चाहते हैं, तो निम्नलिखित कॉन्फ़िगरेशन काम करेगा:
[general]
includes = [
"**/*"
]
excludes = [
".git/*",
]
[display]
show_details = true
यदि आप इसके बजाय स्पष्ट रूप से परिभाषित करना चाहते हैं कि किस फ़ोल्डर में आपकी स्रोत फ़ाइलें हैं, तो निम्नलिखित कॉन्फ़िगरेशन उदाहरण src निर्देशिका में सभी फ़ाइलों को स्कैन करेगा (बिना कुछ अनदेखा किए):
[general]
includes = [
"src/**/*"
]
excludes = [
]
[display]
show_details = true
इस अनुभाग में निम्नलिखित सेटिंग्स उपलब्ध हैं:
उदाहरण: show_details = true, verbose = true
src/lib.rs - 0 BIDI characters
src/main.rs - 0 BIDI characters
test/example-commenting-out.js - 6 BIDI characters
Found character RLO (Right-to-Left Override), test/example-commenting-out.js:4:3
Found character LRI (Left-to-Right Isolate), test/example-commenting-out.js:4:7
Found character PDI (Pop Directional Isolate), test/example-commenting-out.js:4:20
Found character LRI (Left-to-Right Isolate), test/example-commenting-out.js:4:22
Found character RLO (Right-to-Left Override), test/example-commenting-out.js:6:20
Found character LRI (Left-to-Right Isolate), test/example-commenting-out.js:6:24
Found 6 potentially dangerous Unicode BIDI characters!
उदाहरण: show_details = false, verbose = true
src/lib.rs - 0 BIDI characters
src/main.rs - 0 BIDI characters
test/example-commenting-out.js - 6 BIDI characters
Found 6 potentially dangerous Unicode BIDI characters!
उदाहरण: show_details = false, verbose = false
test/example-commenting-out.js - 6 BIDI characters
Found 6 potentially dangerous Unicode BIDI characters!
हमले का पता लगाने के सभी क्रेडिट, प्रासंगिक BIDI कैरेक्टर की सूची सहित, संबंधित पेपर के मूल लेखकों को जाते हैं। कृपया उनके काम पर निर्माण करते समय उनके मूल पेपर का हवाला दें।
इस रिपॉजिटरी में फ़ाइल test/example-commenting-out.js उनकी मूल रिपॉजिटरी में commenting-out.js की एक प्रति है। इसका लाइसेंस मूल रिपॉजिटरी (MIT लाइसेंस) का अनुसरण करता है।
इसका उपयोग यहाँ केवल परीक्षण उद्देश्यों के लिए किया जाता है।
@article{boucher_trojansource_2021,
title = {Trojan {Source}: {Invisible} {Vulnerabilities}},
author = {Nicholas Boucher and Ross Anderson},
year = {2021},
journal = {Preprint},
eprint = {2111.00169},
archivePrefix = {arXiv},
primaryClass = {cs.CR},
url = {https://arxiv.org/abs/2111.00169}
}
| Setting | Description | Optional | Default | Introduced in |
|---|
show_details | यह निर्णय लेता है कि मिलने पर पता लगाए गए BIDI कैरेक्टर की लाइन/स्थिति और प्रकार को प्रिंट करना है या नहीं (नीचे उदाहरण देखें) | नहीं | - | v0.1.1 |
ignore_invalid_data | क्या बाइनरी/गैर-UTF8 फ़ाइलों का पता चलने पर त्रुटि संदेश मुद्रित करना है | हाँ | true | v0.1.2 |
verbose | क्या फ़ाइल का नाम प्रिंट करना है भले ही कोई संदिग्ध कैरेक्टर न मिले | हाँ | true | v0.1.2 |