मैंने एक नोटबुक से शुरुआत की थी। कोई टेक्स्ट एडिटर या मार्कडाउन फ़ाइल नहीं, बल्कि एक स्पाइरल-बाउंड पेपर नोटबुक, जो उन कमांड्स से भरी थी जिन्हें मैं समझता भी नहीं था। मैंने ls, grep, find, chmod, और nmap लिखा। मैंने पेज दर पेज सिंटैक्स (syntax) जमा किए, Linux और साइबर सुरक्षा को शब्दावली परीक्षण (vocabulary tests) की तरह लिया, जैसे कि अगले व्यक्ति से अधिक फ्लैग्स (flags) जानना मुझे सक्षम बना देगा। मैं सिंटैक्स को धाराप्रवाह कॉपी कर सकता था। लेकिन, यदि कोई मुझसे पूछे कि किसी कमांड ने एक विशेष परिणाम क्यों दिया, तो मैं चुप हो जाता था। वही चुप्पी समस्या थी।

नोटबुक का जाल

नोटबुक देखकर ऐसा लगता था जैसे प्रगति हो रही है। हर पेज पर और स्याही बढ़ती जा रही थी: find / -name "*.conf", nmap -sV, पाइप और रेगुलर एक्सप्रेशंस (regular expressions) के साथ grep|। ट्यूटोरियल्स में, यह तरीका काम करता हुआ प्रतीत होता है। एक प्रेजेंटर एक कमांड टाइप करता है, स्क्रीन पर अपेक्षित आउटपुट दिखता है, और आप सिर हिलाते हैं। आपको लगता है कि आप सक्षम हैं क्योंकि आपका टर्मिनल बिल्कुल उनके जैसा है। लेकिन यह क्षमता उधार ली हुई है। यह उस व्यक्ति की है जिसने ट्यूटोरियल का रास्ता डिज़ाइन किया है।

वास्तविक वातावरण (Real environments) स्क्रिप्ट का पालन नहीं करते हैं। एक सर्वर आपके SSH कनेक्शन को अस्वीकार कर देता है भले ही पोर्ट खुला हो। chmod +x चलाने के बाद भी एक स्क्रिप्ट "permission denied" के साथ विफल हो जाती है। एक स्कैन किसी पोर्ट को 'open' के बजाय 'filtered' बताता है, और अब आपको यह तय करना होगा कि इसका मतलब फ़ायरवॉल नियम है, होस्ट-आधारित नियंत्रण है, या कोई घुसपैठ रोकथाम प्रणाली (intrusion prevention system) चुपचाप आपके प्रोब्स (probes) को ड्रॉप कर रही है। उन क्षणों में, सिंटैक्स रटना विफल हो जाता है क्योंकि समस्या वह कमांड नहीं है जिसे आप भूल गए हैं। समस्या वह सिस्टम है जिसे आप समझते नहीं हैं।

नकल करना सीखना नहीं है

एक ट्यूटोरियल का पालन करने और किसी समस्या को हल करने के बीच अंतर होता है। जब आप नकल करते हैं, तो आप किसी और के नक्शे पर स्टेप A से स्टेप B पर जाते हैं। जब कुछ अलग होता है, तो आप जम जाते हैं क्योंकि आपका मानसिक मॉडल (mental model) खाली होता है। आप जानते हैं कि chmod 755 अनुमतियाँ (permissions) बदलता है, लेकिन आप यह नहीं समझा सकते कि जब फ़ाइल noexec फ्लैग वाले माउंट पर होती है, तो सिस्टम फिर भी एक्सेस को क्यों रोकता है। आप जानते हैं कि nmap पोर्ट स्कैन कर सकता है, लेकिन आप यह नहीं समझा सकते कि जब stateful inspection शामिल हो, तो एक SYN स्कैन एक connect स्कैन की तुलना में अलग परिणाम क्यों देता है।

आप Linux या नेटवर्किंग सीख नहीं रहे थे। आप नकल करना सीख रहे थे।

सवाल को बदलें

मैंने एक चीज़ बदली। मैंने यह पूछना बंद कर दिया कि "कौन सा कमांड इसे ठीक करता है?" और यह पूछना शुरू किया कि "सिस्टम वास्तव में क्या कर रहा है?" यह बदलाव असहज था क्योंकि इसने मेरी गति धीमी कर दी। लेकिन यह असरदार रहा।

फ़ाइल अनुमतियों (file permissions) को ही लें। chmod कोई जादुई नंबर वाली प्रार्थना नहीं है। यह इस बात की ऊपरी परत है कि kernel कैसे inodes तक एक्सेस को नियंत्रित करता है। जब आप समझते हैं कि ऑपरेटिंग सिस्टम आपके प्रभावी यूजर आईडी (effective user ID) की तुलना फ़ाइल के ओनर, ग्रुप और दूसरों से करता है, तो वे नंबर समझ में आने लगते हैं। जब आप सीखते हैं कि डायरेक्टरी अनुमतियाँ यह नियंत्रित करती हैं कि क्या आप किसी पाथ (path) में जा सकते हैं या उसकी सामग्री देख सकते हैं, तो आप यह सोचना बंद कर देते हैं कि आप एक फ़ाइल पढ़ तो सकते हैं लेकिन उस तक पहुँच क्यों नहीं सकते। आप महसूस करते हैं कि डायरेक्टरी पर execute permission प्रोग्राम चलाने के बारे में नहीं है; यह उसके अंदर के inodes तक पहुँचने की अनुमति के बारे में है। अचानक, chmod को रटने की ज़रूरत नहीं पड़ती। इसे संदर्भ (context) की ज़रूरत होती है।

नेटवर्किंग के बुनियादी सिद्धांत nmap के लिए भी यही काम करते हैं। पोर्ट स्कैन खुले दरवाजों की सूची नहीं है; यह पैकेटों (packets) से होने वाली एक बातचीत है। जब आप TCP three-way handshake को समझ लेते हैं, तो आप समझ जाते हैं कि SYN स्कैन के लिए raw socket विशेषाधिकारों की आवश्यकता क्यों होती है और एक बंद पोर्ट RST के साथ जवाब क्यों देता है जबकि एक filtered पोर्ट आपको कुछ भी नहीं दे सकता है। आप फ्लैग संयोजनों को रटना बंद कर देते हैं और इस बारे में तर्क करना शुरू कर देते हैं कि आप कौन से पैकेट भेज रहे हैं और उस चुप्पी या शोर (noise) का क्या अर्थ है।

Burp Suite जैसे एप्लिकेशन-लेयर टूल्स भी तब समझ में आने लगते हैं जब आप HTTP को समझ लेते हैं। यह आपके और वेब सर्वर के बीच बैठा एक प्रॉक्सी (proxy) मात्र है। यदि आप HTTP मेथड्स, हेडर्स, स्टेटस कोड और यह नहीं समझते कि रिक्वेस्ट सर्वर-साइड लॉजिक से कैसे जुड़ती है, तो Burp Suite बटनों का एक भ्रमित करने वाला डैशबोर्ड है। एक बार जब आप जान जाते हैं कि एक रिक्वेस्ट कैसे यात्रा करती है और एक सर्वर रिस्पॉन्स कैसे बनाता है, तो टूल स्पष्ट हो जाता है। आप Burp Suite नहीं सीख रहे हैं। आप Burp Suite के साथ HTTP का निरीक्षण कर रहे हैं।

नींव मजबूत करें

यदि आप शुरुआत कर रहे हैं, तो चीटशीट्स (cheatsheets) इकट्ठा करने की इच्छा का विरोध करें। तीन क्षेत्रों पर ध्यान केंद्रित करें जो कभी पुराने नहीं होते।

Linux basics के लिए, सीखें कि kernel कैसे प्रोसेस को शेड्यूल करता है, shell कैसे कमांड को पार्स (parse) करता है, और एनवायरनमेंट वेरिएबल्स (environment variables) प्रोग्राम के व्यवहार को कैसे प्रभावित करते हैं। stdin, stdout, और stderr को केवल जानकारी के रूप में नहीं, बल्कि उस प्लंबिंग (plumbing) के रूप में समझें जो पाइप्स को काम करने में सक्षम बनाती है।

networking protocols के लिए, बिना जल्दबाजी किए TCP/IP stack का अध्ययन करें