நான் ஒரு நோட்டுப் புத்தகத்துடன் தொடங்கினேன். அது ஒரு டெக்ஸ்ட் எடிட்டர் அல்லது ஒரு மார்க் டவுன் கோப்பு அல்ல, மாறாக எனக்குப் புரியாத கட்டளைகளால் (commands) நிறைந்த ஒரு ஸ்பைரல்-பைண்ட் செய்யப்பட்ட காகித நோட்டுப் புத்தகம். நான் ls, grep, find, chmod, மற்றும் nmap ஆகியவற்றை எழுதினேன். ஒவ்வொரு பக்கத்தையும் தொடர்ச்சியாக சிண்டாக்ஸ் (syntax) மூலம் நிரப்பினேன், லினக்ஸ் (Linux) மற்றும் சைபர் செக்யூரிட்டியின் (cybersecurity) நுணுக்கங்களை ஒரு சொல்ச் சோதனை (vocabulary test) போலக் கருதினேன்; அடுத்தவரை விட அதிக ஃபிளாக்ஸ்களை (flags) அறிந்துகொள்வது என்னைத் திறமையானவனாக மாற்றிவிடும் என்று நினைத்தேன். என்னால் சிண்டாக்ஸை சரளமாக நகலெடுக்க முடிந்தது. ஆனால், ஒரு கட்டளை ஏன் ஒரு குறிப்பிட்ட முடிவைத் தருகிறது என்று விளக்கச் சொன்னால், நான் மௌனமாகிவிடுவேன். அந்த மௌனம் தான் பிரச்சனை.
நோட்டுப் புத்தகப் பொறி (The Notebook Trap)
அந்த நோட்டுப் புத்தகம் முன்னேற்றமாகத் தெரிந்தது. ஒவ்வொரு பக்கமும் அதிக மை கொண்டு நிரப்பப்பட்டது: find / -name "*.conf", nmap -sV, மற்றும் பைப்ஸ் (pipes) மற்றும் ரெகுலர் எக்ஸ்பிரஷன்களுடன் (regular expressions) கூடிய grep. பயிற்சிகளில் (tutorials), இந்த அணுகுமுறை வேலை செய்வது போலத் தோன்றும். ஒரு பயிற்சியாளர் ஒரு கட்டளையைத் தட்டச்சு செய்கிறார், திரை எதிர்பார்க்கப்பட்ட வெளியீட்டைக் காட்டுகிறது, நீங்கள் தலையசைத்துக்கொண்டே இருக்கிறீர்கள். உங்கள் டெர்மினல் (terminal) அவர்களது டெர்மினலைப் போலவே சரியாக இருப்பதால், நீங்கள் திறமையானவர் என்று உணர்கிறீர்கள். ஆனால் இந்தத் திறன் கடனாகப் பெறப்பட்டது. அது அந்தப் பயிற்சியின் பாதையை வடிவமைத்தவருக்குச் சொந்தமானது.
நிஜமான சூழல்கள் ஸ்கிரிப்ட்களைப் பின்பற்றுவதில்லை. போர்ட் (port) திறந்திருந்தாலும், ஒரு சர்வர் உங்கள் SSH இணைப்பை மறுக்கிறது. நீங்கள் ஏற்கனவே chmod +x செய்த பிறகும், ஒரு ஸ்கிரிப்ட் "permission denied" என்று தோல்வியடைகிறது. ஒரு ஸ்கேன் ஒரு போர்ட்டை 'open' என்பதற்குப் பதிலாக 'filtered' என்று காட்டுகிறது, இப்போது அது ஒரு ஃபயர்வால் விதி (firewall rule), ஹோஸ்ட் சார்ந்த கட்டுப்பாடு (host-based control), அல்லது ஒரு ஊடுருவல் தடுப்பு அமைப்பு (intrusion prevention system) உங்கள் சோதனைகளை அமைதியாகத் தடுத்துவிடுகிறதா என்பதை நீங்கள் தீர்மானிக்க வேண்டும். அந்தத் தருணங்களில், சிண்டாக்ஸை மனப்பாடம் செய்வது தோல்வியடைகிறது, ஏனெனில் பிரச்சனை நீங்கள் மறந்த கட்டளை அல்ல; அது உங்களுக்குப் புரியாத ஒரு அமைப்பு (system).
நகலெடுப்பது கற்றல் அல்ல
ஒரு பயிற்சியைப் பின்பற்றுவதற்கும் ஒரு சிக்கலைத் தீர்ப்பதற்கும் இடையே வித்தியாசம் உள்ளது. நீங்கள் நகலெடுக்கும்போது, மற்றவருடைய வரைபடத்தில் (map) ஒரு நிலையிலிருந்து (Step A) மற்றொரு நிலைக்கு (Step B) நகர்கிறீர்கள். ஏதேனும் மாற்றம் ஏற்படும்போது, உங்கள் மன மாதிரி (mental model) காலியாக இருப்பதால் நீங்கள் உறைந்து போகிறீர்கள். chmod 755 அனுமதிகளை மாற்றுகிறது என்று உங்களுக்குத் தெரியும், ஆனால் கோப்பு noexec ஃபிளாக் (flag) கொண்ட ஒரு மவுண்டில் (mount) இருக்கும்போது ஏன் சிஸ்டம் இன்னும் அணுகலைத் தடுக்கிறது என்பதை உங்களால் விளக்க முடியாது. nmap போர்ட்களை ஸ்கேன் செய்ய முடியும் என்று உங்களுக்குத் தெரியும், ஆனால் ஸ்டேட்ஃபுல் இன்ஸ்பெக்ஷன் (stateful inspection) இருக்கும்போது, ஒரு SYN ஸ்கேன் ஏன் ஒரு கனெக்ட் ஸ்கேனை விட (connect scan) வேறுபட்ட முடிவுகளைத் தருகிறது என்பதை உங்களால் விளக்க முடியாது.
நீங்கள் லினக்ஸ் அல்லது நெட்வொர்க்கிங்கை (networking) கற்கவில்லை. நீங்கள் ஒருவரைப் போலப் போலச் செய்யக் கற்றுக் கொண்டிருந்தீர்கள்.
கேள்வியைத் திருப்பித் திருப்புங்கள்
நான் ஒரு விஷயத்தை மாற்றினேன். "எந்தக் கட்டளை இதைச் சரிசெய்யும்?" என்று கேட்பதை நிறுத்திவிட்டு, "இந்த அமைப்பு உண்மையில் என்ன செய்கிறது?" என்று கேட்கத் தொடங்கினேன். இந்த மாற்றம் எனக்கு அசௌகரியமாக இருந்தது, ஏனெனில் இது எனது வேகத்தைக் குறைத்தது. ஆனால் இது நிலைத்து நின்றது.
கோப்பு அனுமதிகளை (file permissions) எடுத்துக் கொள்ளுங்கள். chmod என்பது ஒரு மந்திர எண் பிரார்த்தனை அல்ல. அது கர்னல் (kernel) எவ்வாறு இனோட்களுக்கு (inodes) அணுகலைத் தீர்மானிக்கிறது என்பதன் மேற்பரப்பு அடுக்கு மட்டுமே. இயங்குதளம் (operating system) உங்கள் பயனர் ஐடியை (user ID) கோப்பின் உரிமையாளர், குழு மற்றும் பிறருடன் ஒப்பிட்டுச் சரிபார்க்கிறது என்பதை நீங்கள் புரிந்து கொள்ளும்போது, அந்த எண்கள் அர்த்தமுள்ளதாகின்றன. டைரக்டரி அனுமதிகள் (directory permissions) ஒரு பாதையை நீங்கள் கடந்து செல்லலாமா அல்லது அதன் உள்ளடக்கங்களைப் பட்டியலிடலாமா என்பதைக் கட்டுப்படுத்துகின்றன என்பதை நீங்கள் அறியும்போது, ஒரு கோப்பை உங்களால் படிக்க முடிகிறது ஆனால் அதை அணுக முடியவில்லை என்று நீங்கள் ஏன் வியக்கிறீர்கள் என்பது நின்றுவிடும். ஒரு டைரக்டரியில் உள்ள 'execute' அனுமதி என்பது புரோகிராம்களை இயக்குவது பற்றியது அல்ல; அது உள்ளே இருக்கும் இனோட்களை (inodes) அணுக அனுமதிக்கப்படுவதைப் பற்றியது என்பதை நீங்கள் உணர்வீர்கள். திடீரென்று, chmod-க்கு மனப்பாடம் செய்யத் தேவையில்லை. அதற்கு சூழல் (context) தேவைப்படுகிறது.
நெட்வொர்க்கிங் அடிப்படைகளும் nmap-க்கு இதையே செய்கின்றன. ஒரு போர்ட் ஸ்கேன் என்பது திறந்திருக்கும் கதவுகளின் பட்டியல் அல்ல; அது பாக்கெட்டுகளால் (packets) ஆன ஒரு உரையாடல். TCP மூன்று வழி கைமாற்றத்தை (three-way handshake) நீங்கள் புரிந்து கொள்ளும்போது, ஏன் ஒரு SYN ஸ்கேனுக்கு ராவ் சாக்கெட் (raw socket) உரிமைகள் தேவைப்படுகின்றன என்பதையும், ஏன் ஒரு மூடிய போர்ட் (closed port) ஒரு RST பதிலைத் தருகிறது, அதே சமயம் ஒரு ஃபில்டர்டு (filtered) போர்ட் எதையும் தராமல் இருக்கலாம் என்பதையும் நீங்கள் புரிந்து கொள்கிறீர்கள். நீங்கள் ஃபிளாக் (flag) சேர்க்கைகளை மனப்பாடம் செய்வதை நிறுத்திவிட்டு, நீங்கள் என்ன பாக்கெட்டுகளை அனுப்புகிறீர்கள் மற்றும் அந்த அமைதியோ அல்லது சத்தமோ எதைக் குறிக்கிறது என்பதைப் பற்றிச் சிந்திக்கத் தொடங்குகிறீர்கள்.
HTTP-ஐ நீங்கள் புரிந்து கொண்டவுடன் Burp Suite போன்ற அப்ளிகேஷன் லேயர் (application-layer) கருவிகளும் எளிதாகத் புலப்படும். இது உங்களுக்கும் ஒரு வெப் சர்வருக்கும் (web server) இடையில் அமர்ந்திருக்கும் ஒரு ப்ராக்ஸி (proxy) மட்டுமே. உங்களுக்கு HTTP முறைகள் (methods), ஹெடர்கள் (headers), ஸ்டேட்டஸ் கோடுகள் (status codes) மற்றும் கோரிக்கைகள் (requests) எவ்வாறு சர்வர் பக்க லாஜிக்கிற்கு (server-side logic) பொருந்துகின்றன என்று தெரியவில்லை என்றால், Burp Suite என்பது பொத்தான்கள் நிறைந்த ஒரு குழப்பமான டேஷ்போர்டு (dashboard) மட்டுமே. ஒரு கோரிக்கை எவ்வாறு பயணிக்கிறது மற்றும் ஒரு சர்வர் எவ்வாறு ஒரு பதிலை உருவாக்குகிறது என்பதை நீங்கள் அறிந்தவுடன், அந்தத் கருவி எளிதாகிவிடும். நீங்கள் Burp Suite-ஐக் கற்கவில்லை. நீங்கள் Burp Suite மூலம் HTTP-ஐ ஆய்வு செய்கிறீர்கள்.
அடித்தளத்தை உருவாக்குங்கள்
நீங்கள் இப்போதுதான் தொடங்குகிறீர்கள் என்றால், சீட்ஷீட்களை (cheatsheets) சேகரிக்க வேண்டும் என்ற தூண்டுதலைத் தவிர்க்கவும். காலாவதியாகாத மூன்று துறைகளில் கவனம் செலுத்துங்கள்.
Linux அடிப்படைகளுக்காக, கர்னல் எவ்வாறு செயல்முறைகளை (processes) திட்டமிடுகிறது, ஷெல் (shell) எவ்வாறு கட்டளைகளைப் பகுப்பாய்வு செய்கிறது மற்றும் என்விரான்மென்ட் வேரியபிள்கள் (environment variables) நிரல் நடத்தையில் எவ்வாறு தாக்கத்தை ஏற்படுத்துகின்றன என்பதைக் கற்றுக்கொள்ளுங்கள். stdin, stdout, மற்றும் stderr ஆகியவற்றை வெறும் தகவலாகப் பார்க்காமல், பைப்ஸ் (pipes) செயல்பட உதவும் குழாய் அமைப்பாகப் (plumbing) புரிந்து கொள்ளுங்கள்.
நெட்வொர்க்கிங் புரோட்டோகால்களுக்காக (networking protocols), அவசரப்படாமல் TCP/IP ஸ்டேக்கை (stack) ஆய்வு செய்யுங்கள்
