ഞാൻ ഒരു നോട്ട്ബുക്കിലൂടെയാണ് തുടങ്ങിയത്. ഒരു ടെക്സ്റ്റ് എഡിറ്ററോ മാർക്ക്ഡൗൺ ഫയലോ അല്ല, മറിച്ച് എനിക്ക് മനസ്സിലാകാത്ത കമാൻഡുകൾ കൊണ്ട് നിറച്ച ഒരു സ്പൈറൽ-ബൈൻഡ് പേപ്പർ നോട്ട്ബുക്ക്. ഞാൻ ls, grep, find, chmod, nmap എന്നിവ എഴുതിവെച്ചു. ലിനക്സും (Linux) സൈബർ സെക്യൂരിറ്റിയും ഒരു വൊക്കാബുലറി ടെസ്റ്റ് പോലെ കണ്ട്, ഓരോ പേജിലും സിന്റാക്സുകൾ (syntax) ഞാൻ അടുക്കിവെച്ചു; കൂടുതൽ ഫ്ലാഗുകൾ (flags) അറിയുന്നത് എന്നെ കഴിവുള്ളവനാക്കുമെന്ന് ഞാൻ കരുതി. എനിക്ക് സിന്റാക്സുകൾ ഒഴുക്കോടെ കോപ്പി ചെയ്യാൻ അറിയാമായിരുന്നു. എന്നാൽ ഒരു കമാൻഡ് എന്തുകൊണ്ടാണ് ഒരു പ്രത്യേക ഫലം നൽകിയത് എന്ന് വിശദീകരിക്കാൻ പറഞ്ഞാൽ ഞാൻ മിണ്ടാതിരിക്കും. ആ നിശബ്ദതയായിരുന്നു പ്രശ്നം.
നോട്ട്ബുക്ക് കെണി (The Notebook Trap)
ആ നോട്ട്ബുക്ക് പുരോഗതിയാണെന്ന് തോന്നിപ്പിച്ചു. ഓരോ പേജിലും കൂടുതൽ മഷി പടർന്നു: find / -name "*.conf", nmap -sV, പൈപ്പുകളും (pipes) റെഗുലർ എക്സ്പ്രഷനുകളും (regular expressions) ഉപയോഗിച്ചുള്ള grep. ട്യൂട്ടോറിയലുകളിൽ ഈ രീതി ഫലപ്രദമായി തോന്നാം. ഒരു പ്രസന്റർ ഒരു കമാൻഡ് ടൈപ്പ് ചെയ്യുന്നു, സ്ക്രീനിൽ പ്രതീക്ഷിച്ച ഔട്ട്പുട്ട് കാണിക്കുന്നു, നിങ്ങൾ അത് നോക്കി തലയാട്ടുന്നു. നിങ്ങളുടെ ടെർമിനലും അവരുടെ ടെർമിനലും കൃത്യമായി ഒത്തുപോകുന്നതുകൊണ്ട് നിങ്ങൾ കാര്യങ്ങൾ അറിയാമെന്ന് നിങ്ങൾക്ക് തോന്നും. എന്നാൽ ഈ കഴിവ് കടമെടുത്തതാണ്. അത് ആ ട്യൂട്ടോറിയൽ തയ്യാറാക്കിയ വ്യക്തിയുടേതാണ്.
യഥാർത്ഥ സാഹചര്യങ്ങൾ സ്ക്രിപ്റ്റുകൾ അനുസരിച്ചല്ല പ്രവർത്തിക്കുന്നത്. പോർട്ട് തുറന്നിരിക്കുമ്പോഴും ഒരു സെർവർ നിങ്ങളുടെ SSH കണക്ഷൻ നിരസിച്ചേക്കാം. chmod +x നൽകിയതിന് ശേഷവും ഒരു സ്ക്രിപ്റ്റ് "permission denied" എന്ന് കാണിച്ചേക്കാം. ഒരു സ്കാൻ ഒരു പോർട്ടിനെ 'open' എന്നതിന് പകരം 'filtered' എന്ന് കാണിച്ചാൽ, അത് ഒരു ഫയർവാൾ റൂൾ (firewall rule) ആണോ, ഹോസ്റ്റ് അധിഷ്ഠിത നിയന്ത്രണമാണോ (host-based control), അതോ ഒരു ഇൻട്രൂഷൻ പ്രിവൻഷൻ സിസ്റ്റം (intrusion prevention system) നിശബ്ദമായി നിങ്ങളുടെ പ്രോബുകൾ തടയുകയാണോ എന്ന് നിങ്ങൾ തീരുമാനിക്കേണ്ടി വരും. അത്തരം നിമിഷങ്ങളിൽ, സിന്റാക്സ് മനഃപാഠമാക്കുന്നത് കൊണ്ട് കാര്യമില്ല, കാരണം പ്രശ്നം നിങ്ങൾ മറന്നുപോയ ഒരു കമാൻഡ് അല്ല, മറിച്ച് നിങ്ങൾക്ക് മനസ്സിലാകാത്ത ഒരു സിസ്റ്റമാണ്.
കോപ്പി ചെയ്യുന്നത് പഠനമല്ല (Copying Is Not Learning)
ഒരു ട്യൂട്ടോറിയൽ പിന്തുടരുന്നതും ഒരു പ്രശ്നം പരിഹരിക്കുന്നതും തമ്മിൽ വ്യത്യാസമുണ്ട്. നിങ്ങൾ കോപ്പി ചെയ്യുമ്പോൾ, മറ്റൊരാളുടെ മാപ്പിലൂടെ സ്റ്റെപ്പ് A-യിൽ നിന്ന് സ്റ്റെപ്പ് B-യിലേക്ക് നിങ്ങൾ നീങ്ങുന്നു. എന്തെങ്കിലും വ്യതിയാനം ഉണ്ടാകുമ്പോൾ, നിങ്ങളുടെ അറിവ് അപൂർണ്ണമായതിനാൽ നിങ്ങൾ പകച്ചുപോകുന്നു. chmod 755 പെർമിഷനുകൾ മാറ്റുന്നു എന്ന് നിങ്ങൾക്ക് അറിയാം, എന്നാൽ ഒരു ഫയൽ noexec ഫ്ലാഗുള്ള ഒരു മൗണ്ടിൽ (mount) ഇരിക്കുമ്പോൾ സിസ്റ്റം എന്തുകൊണ്ട് ഇപ്പോഴും ആക്സസ് തടയുന്നു എന്ന് വിശദീകരിക്കാൻ നിങ്ങൾക്ക് കഴിയില്ല. nmap ഉപയോഗിച്ച് പോർട്ടുകൾ സ്കാൻ ചെയ്യാമെന്ന് നിങ്ങൾക്ക് അറിയാം, എന്നാൽ സ്റ്റേറ്റ്ഫുൾ ഇൻസ്പെക്ഷൻ (stateful inspection) ഉള്ളപ്പോൾ ഒരു SYN സ്കാൻ എന്തുകൊണ്ടാണ് ഒരു കണക്ട് സ്കാനിൽ (connect scan) നിന്ന് വ്യത്യസ്തമായ ഫലം നൽകുന്നത് എന്ന് വ്യാഖ്യാനിക്കാൻ നിങ്ങൾക്ക് കഴിയില്ല.
നിങ്ങൾ ലിനക്സോ നെറ്റ്വർക്കിംഗോ അല്ല പഠിച്ചുകൊണ്ടിരുന്നത്. നിങ്ങൾ അനുകരിക്കാനാണ് പഠിച്ചുകൊണ്ടിരുന്നത്.
ചോദ്യം മാറ്റുക (Flip the Question)
ഞാൻ ഒരു കാര്യം മാറ്റി. "ഏത് കമാൻഡ് ആണ് ഇത് പരിഹരിക്കുക?" എന്ന് ചോദിക്കുന്നത് നിർത്തി ഞാൻ "സിസ്റ്റം യഥാർത്ഥത്തിൽ എന്താണ് ചെയ്യുന്നത്?" എന്ന് ചോദിക്കാൻ തുടങ്ങി. ഈ മാറ്റം അസ്വസ്ഥതയുണ്ടാക്കി കാരണം അത് എന്റെ വേഗത കുറച്ചു. എങ്കിലും അത് എന്നിൽ പതിഞ്ഞു.
ഫയൽ പെർമിഷനുകൾ (file permissions) എടുക്കുക. chmod എന്നത് വെറുമൊരു മാന്ത്രിക സംഖ്യയല്ല. കേർണൽ (kernel) എങ്ങനെയാണ് inodes-ലേക്ക് ആക്സസ് നിയന്ത്രിക്കുന്നത് എന്നതിന്റെ ഉപരിതല പാളിയാണത്. ഓപ്പറേറ്റിംഗ് സിസ്റ്റം നിങ്ങളുടെ effective user ID, ഫയലിന്റെ ഉടമ (owner), ഗ്രൂപ്പ് (group), മറ്റുള്ളവർ (others) എന്നിവയുമായി താരതമ്യം ചെയ്യുന്നു എന്ന് മനസ്സിലാക്കുമ്പോൾ ആ സംഖ്യകൾക്ക് അർത്ഥമുണ്ടാകും. ഒരു ഡയറക്ടറി പെർമിഷനുകൾ ഒരു പാത്തിലേക്ക് പ്രവേശിക്കാനോ അതിന്റെ ഉള്ളടക്കം ലിസ്റ്റ് ചെയ്യാനോ ഉള്ള അനുമതി നിയന്ത്രിക്കുന്നു എന്ന് പഠിക്കുമ്പോൾ, ഒരു ഫയൽ വായിക്കാൻ കഴിയുമെങ്കിലും അതിലേക്ക് എത്താൻ കഴിയാത്തത് എന്തുകൊണ്ടാണെന്ന് നിങ്ങൾ അത്ഭുതപ്പെടുന്നത് നിൽക്കും. ഒരു ഡയറക്ടറിയിലെ execute പെർമിഷൻ എന്നത് പ്രോഗ്രാമുകൾ പ്രവർത്തിപ്പിക്കുന്നതിനെക്കുറിച്ചല്ല; മറിച്ച് അതിനുള്ളിലെ inodes ആക്സസ് ചെയ്യാൻ അനുമതി നൽകുന്നതിനെക്കുറിച്ചാണെന്ന് നിങ്ങൾ തിരിച്ചറിയുന്നു. പെട്ടെന്ന്, chmod മനഃപാഠമാക്കേണ്ടതില്ല, പകരം അതിന്റെ പശ്ചാത്തലം (context) മനസ്സിലാക്കിയാൽ മതി.
നെറ്റ്വർക്കിംഗ് അടിസ്ഥാന തത്വങ്ങൾ nmap-ന്റെ കാര്യത്തിലും ഇതേപോലെ പ്രവർത്തിക്കുന്നു. ഒരു പോർട്ട് സ്കാൻ എന്നത് തുറന്ന വാതിലുകളുടെ പട്ടികയല്ല; അത് പാക്കറ്റുകൾ (packets) ഉപയോഗിച്ചുള്ള ഒരു സംഭാഷണമാണ്. TCP three-way handshake മനസ്സിലാക്കുമ്പോൾ, എന്തുകൊണ്ടാണ് ഒരു SYN സ്കാനിന് raw socket പ്രിവിലേജുകൾ ആവശ്യമായി വരുന്നത് എന്നും, ഒരു ക്ലോസ്ഡ് പോർട്ട് എന്തുകൊണ്ടാണ് RST നൽകുന്നതെന്നും, എന്നാൽ ഒരു ഫിൽറ്റേർഡ് പോർട്ട് ഒന്നും തന്നെ നൽകുന്നില്ലെന്നും നിങ്ങൾക്ക് മനസ്സിലാകും. നിങ്ങൾ ഫ്ലാഗുകളുടെ കോമ്പിനേഷനുകൾ മനഃപാഠമാക്കുന്നത് നിർത്തി, നിങ്ങൾ അയക്കുന്ന പാക്കറ്റുകളെക്കുറിച്ചും ആ നിശബ്ദതയോ ശബ്ദമോ (noise) എന്താണ് അർത്ഥമാക്കുന്നത് എന്നതിനെക്കുറിച്ചും ചിന്തിക്കാൻ തുടങ്ങും.
HTTP മനസ്സിലാക്കി കഴിഞ്ഞാൽ Burp Suite പോലുള്ള ആപ്ലിക്കേഷൻ ലെയർ ടൂളുകളും എളുപ്പമാകും. ഇത് നിങ്ങളും ഒരു വെബ് സെർവറും തമ്മിലുള്ള ഒരു പ്രോക്സി (proxy) മാത്രമാണ്. നിങ്ങൾക്ക് HTTP മെത്തേഡുകൾ (methods), ഹെഡറുകൾ (headers), സ്റ്റാറ്റസ് കോഡുകൾ (status codes), റിക്വസ്റ്റുകൾ എങ്ങനെ സെർവർ സൈഡ് ലോജിക്കുമായി ബന്ധപ്പെട്ടിരിക്കുന്നു എന്നിവ അറിയില്ലെങ്കിൽ, Burp Suite എന്നത് ബട്ടണുകൾ നിറഞ്ഞ ഒരു ആശയക്കുഴപ്പമുണ്ടാക്കുന്ന ഡാഷ്ബോർഡ് മാത്രമായിരിക്കും. ഒരു റിക്വസ്റ്റ് എങ്ങനെ സഞ്ചരിക്കുന്നുവെന്നും ഒരു സെർവർ എങ്ങനെ ഒരു റെസ്പോൺസ് നിർമ്മിക്കുന്നുവെന്നും മനസ്സിലാക്കിയാൽ, ആ ടൂൾ വളരെ ലളിതമായി തോന്നും. നിങ്ങൾ Burp Suite പഠിക്കുകയല്ല, മറിച്ച് Burp Suite ഉപയോഗിച്ച് HTTP പരിശോധിക്കുകയാണ് ചെയ്യുന്നത്.
അടിത്തറ പാകുക (Build the Foundation)
നിങ്ങൾ തുടക്കക്കാരനാണെങ്കിൽ, ചീറ്റ്ഷീറ്റുകൾ (cheatsheets) ശേഖരിക്കാനുള്ള ആഗ്രഹം നിയന്ത്രിക്കുക. കാലഹരണപ്പെടാത്ത മൂന്ന് മേഖലകളിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കുക.
Linux basics-നായി, കേർണൽ എങ്ങനെയാണ് പ്രോസസുകളെ ഷെഡ്യൂൾ ചെയ്യുന്നതെന്നും, ഷെൽ (shell) എങ്ങനെയാണ് കമാൻഡുകൾ പാഴ്സ് (parse) ചെയ്യുന്നതെന്നും, എൻവയോൺമെന്റ് വേരിയബിളുകൾ (environment variables) പ്രോഗ്രാം പെരുമാറ്റത്തെ എങ്ങനെ ബാധിക്കുന്നുവെന്നും പഠിക്കുക. stdin, stdout, stderr എന്നിവ വെറും അറിവായിട്ടല്ല, മറിച്ച് പൈപ്പുകൾ പ്രവർത്തിപ്പിക്കാൻ സഹായിക്കുന്ന പ്ലംബിംഗ് (plumbing) പോലെ മനസ്സിലാക്കുക.
networking protocols-നായി, തിടുക്കം കൂട്ടാതെ TCP/IP സ്റ്റാക്ക് പഠിക്കുക...
