ผมเริ่มจากสมุดจดเล่มหนึ่ง ไม่ใช่โปรแกรมแก้ไขข้อความหรือไฟล์ Markdown แต่เป็นสมุดโน้ตแบบสันห่วงที่เต็มไปด้วยคำสั่งที่ผมไม่เข้าใจ ผมจด ls, grep, find, chmod และ nmap ลงไป ผมสะสมไวยากรณ์ (syntax) ไว้หน้าแล้วหน้าเล่า ปฏิบัติต่อ Linux และความปลอดภัยทางไซเบอร์เหมือนการสอบคำศัพท์ ราวกับว่าการรู้ flag มากกว่าคนอื่นจะทำให้ผมมีความสามารถ ผมสามารถคัดลอก syntax ได้อย่างคล่องแคล่ว แต่ถ้าให้ผมอธิบายว่าทำไมคำสั่งถึงให้ผลลัพธ์แบบนั้น ผมกลับเงียบสนิท และความเงียบนั้นแหละคือปัญหา

กับดักของสมุดจด

สมุดจดเล่มนั้นดูเหมือนเป็นความก้าวหน้า แต่ละหน้ามีรอยหมึกเพิ่มขึ้น: find / -name "*.conf", nmap -sV, grep พร้อมกับ pipes และ regular expressions ในบทเรียน (tutorials) วิธีนี้ดูเหมือนจะใช้ได้ผล ผู้สอนพิมพ์คำสั่ง หน้าจอแสดงผลลัพธ์ตามที่คาดไว้ และคุณก็พยักหน้าตาม คุณรู้สึกว่าตัวเองเก่งเพราะหน้าจอ terminal ของคุณเหมือนกับของเขาเป๊ะๆ แต่ความสามารถนี้เป็นเพียงการหยิบยืมมา มันเป็นความสามารถของคนที่ออกแบบเส้นทางการสอนนั้นต่างหาก

สภาพแวดล้อมการทำงานจริงไม่ได้ดำเนินไปตามสคริปต์ เซิร์ฟเวอร์ปฏิเสธการเชื่อมต่อ SSH ของคุณทั้งที่พอร์ตเปิดอยู่ สคริปต์ล้มเหลวด้วยข้อความ "permission denied" ทั้งที่คุณรัน chmod +x ไปแล้ว การสแกนรายงานว่าพอร์ตเป็นแบบ filtered แทนที่จะเป็น open และตอนนี้คุณต้องตัดสินใจว่านั่นหมายถึงกฎของไฟร์วอลล์ (firewall rule), การควบคุมระดับโฮสต์ (host-based control) หรือระบบป้องกันการบุกรุก (IPS) ที่กำลังทิ้งแพ็กเก็ตการตรวจสอบของคุณไปอย่างเงียบๆ ในช่วงเวลาเหล่านั้น การท่องจำ syntax จะล้มเหลว เพราะปัญหาไม่ใช่คำสั่งที่คุณลืม แต่มันคือระบบที่คุณไม่เข้าใจ

การคัดลอกไม่ใช่การเรียนรู้

การทำตามบทเรียนกับการแก้ปัญหานั้นมีความแตกต่างกัน เมื่อคุณคัดลอก คุณกำลังเคลื่อนที่จากขั้นตอน A ไปยังขั้นตอน B บนแผนที่ของคนอื่น เมื่อมีบางอย่างผิดเพี้ยนไป คุณจะหยุดชะงักเพราะโมเดลความคิด (mental model) ของคุณว่างเปล่า คุณรู้ว่า chmod 755 เปลี่ยนสิทธิ์การเข้าถึง แต่คุณอธิบายไม่ได้ว่าทำไมระบบยังคงบล็อกการเข้าถึงเมื่อไฟล์นั้นอยู่บน mount ที่มี flag noexec คุณรู้ว่า nmap สแกนพอร์ตได้ แต่คุณตีความไม่ได้ว่าทำไม SYN scan ถึงให้ผลลัพธ์ต่างจาก connect scan เมื่อมีการใช้งาน stateful inspection

คุณไม่ได้กำลังเรียนรู้ Linux หรือระบบเครือข่าย แต่คุณกำลังเรียนรู้ที่จะเลียนแบบ

เปลี่ยนคำถาม

ผมเปลี่ยนสิ่งหนึ่ง ผมเลิกถามว่า "ใช้คำสั่งไหนแก้ปัญหานี้?" และเริ่มถามว่า "จริงๆ แล้วระบบกำลังทำอะไรอยู่?" การเปลี่ยนแปลงนี้ทำให้รู้สึกอึดอัดเพราะมันทำให้ผมทำงานช้าลง แต่มันก็ได้ผล

ลองดูเรื่องสิทธิ์ของไฟล์ chmod ไม่ใช่การสวดอ้อนวอนด้วยตัวเลขวิเศษ แต่มันเป็นเพียงชั้นผิวของการที่ kernel ทำหน้าที่จัดการการเข้าถึง inodes เมื่อคุณเข้าใจว่าระบบปฏิบัติการตรวจสอบ effective user ID ของคุณเทียบกับเจ้าของไฟล์ (owner), กลุ่ม (group) และคนอื่นๆ (others) ตัวเลขเหล่านั้นก็จะสมเหตุสมผล เมื่อคุณเรียนรู้ว่าสิทธิ์ของไดเรกทอรีควบคุมว่าคุณสามารถเข้าไปในเส้นทาง (path) หรือแสดงรายการเนื้อหาได้หรือไม่ คุณจะเลิกสงสัยว่าทำไมคุณอ่านไฟล์ได้แต่เข้าถึงไฟล์นั้นไม่ได้ คุณจะตระหนักว่าสิทธิ์ execute บนไดเรกทอรีไม่ใช่เรื่องของการรันโปรแกรม แต่เป็นเรื่องของการได้รับอนุญาตให้เข้าถึง inodes ที่อยู่ภายใน ทันใดนั้น chmod ก็ไม่จำเป็นต้องท่องจำอีกต่อไป แต่มันต้องการบริบท (context)

พื้นฐานระบบเครือข่ายก็ใช้หลักการเดียวกันกับ nmap การสแกนพอร์ตไม่ใช่แค่รายการของประตูที่เปิดอยู่ แต่มันคือการสนทนาที่ประกอบขึ้นจากแพ็กเก็ต (packets) เมื่อคุณเข้าใจเรื่อง TCP three-way handshake คุณจะเข้าใจว่าทำไม SYN scan ถึงต้องใช้สิทธิ์ raw socket และทำไมพอร์ตที่ปิดอยู่ถึงตอบกลับด้วย RST ในขณะที่พอร์ตที่ถูก filtered อาจจะไม่ตอบอะไรเลย คุณจะเลิกท่องจำการผสม flag และเริ่มใช้เหตุผลว่าแพ็กเก็ตที่คุณส่งไปคืออะไร และความเงียบหรือสัญญาณรบกวนนั้นหมายถึงอะไร

แม้แต่เครื่องมือในระดับ application layer อย่าง Burp Suite ก็จะเข้าใจได้ทันทีเมื่อคุณเข้าใจ HTTP มันเป็นเพียง proxy ที่วางอยู่ระหว่างคุณกับเว็บเซิร์ฟเวอร์ หากคุณไม่เข้าใจ HTTP methods, headers, status codes และการที่ request เชื่อมโยงกับ logic ฝั่งเซิร์ฟเวอร์อย่างไร Burp Suite ก็จะเป็นเพียงแผงควบคุมที่มีแต่ปุ่มที่น่าสับสน เมื่อคุณรู้ว่า request เดินทางอย่างไรและเซิร์ฟเวอร์สร้าง response อย่างไร เครื่องมือนี้ก็จะกลายเป็นเรื่องที่เข้าใจได้ง่าย คุณไม่ได้กำลังเรียนรู้ Burp Suite แต่คุณกำลังตรวจสอบ HTTP ด้วย Burp Suite

สร้างรากฐาน

หากคุณกำลังเริ่มต้น จงหักห้ามใจไม่ให้สะสม cheatsheets แต่ให้มุ่งเน้นไปที่สามด้านที่จะไม่มีวันล้าสมัย

สำหรับ พื้นฐาน Linux ให้เรียนรู้วิธีที่ kernel จัดลำดับการทำงานของ process, วิธีที่ shell วิเคราะห์คำสั่ง (parse commands) และวิธีที่ environment variables ส่งผลต่อพฤติกรรมของโปรแกรม ทำความเข้าใจ stdin, stdout และ stderr ไม่ใช่ในฐานะเกร็ดความรู้ แต่ในฐานะระบบท่อ (plumbing) ที่ทำให้การใช้ pipes ทำงานได้

สำหรับ โปรโตคอลเครือข่าย ให้ศึกษา TCP/IP stack โดยไม่ต้องรีบร้อน