| Home | Articles | Webboard | Download | LHC | LSC | Training Courses |

เมื่อหนอนอินเตอร์เน็ตจับมือกับ Cracker อะไรจะเกิดขึ้น

ธีรภัทร มนตรีศาสตร์,RHCE

"เรื่องราวของภัยมืดที่แฝงเร้นอยู่ในโลกไซเบอร์เสปซ มันอาจจะคุกคามเข้ามาถึงตัวคุณแล้ว เพียงแค่คุณยังไม่รู้ตัวเท่านั้น" ช่วงระยะเวลาเพียงหกสัปดาห์ที่ผู้เขียนได้มีโอกาสสนทนากับบรรดาผู้ดูแลระบบคอมพิวเตอร์ทั้งที่เป็นลูกศิษย์ที่เข้ารับการอบรมลีนุกซ์กับผู้เขียน และมิตรสหายร่วมวงการ ซึ่งอันที่จริงแล้วการพูดคุยกับคนจำนวนมากน่าจะทำให้เราได้สนทนาแลกเปลี่ยนความคิดเห็นที่หลากหลาย แต่เปล่าเลยครับ เรื่องที่นำมาเป็นประเด็นสนทนามากที่สุดและเกือบเป็นเพียงเรื่องเดียวเลยก็คือ เรื่องปัญหาความปลอดภัยของระบบคอมพิวเตอร์ แทบทุกองค์กรไม่ว่าจะเป็นภาครัฐ หรือเอกชนล้วนแล้วแต่ต้องประสบกับปัญหาที่ก่อให้เกิดความบกพร่องขึ้นในระบบเครือข่ายมากบ้างน้อยบ้างแตกต่างกันไป ตั้งแต่ปัญหาจุกจิกประจำวันอย่างเช่น ไวรัสคอมพิวเตอร์ ไปจนกระทั้งถึงการถูกแครกเกอร์เข้ายึดเซิร์ฟเวอร์แล้วใช้เป็นฐานโจมตีเซิร์ฟเวอร์อื่นจนถูกร้องเรียนมาถึงต้นสังกัด ภัยคุกคามที่เลวร้ายเช่นนี้ นับวันยิ่งทวีความชัดเจนขึ้น รุนแรงขึ้น และมีความถี่มากขึ้น สิ่งที่น่าสนใจ และน่าแปลกใจยิ่งไปกว่านั้นก็คือ กลยุทธหรือวิธีการที่พัฒนาขึ้นมาก มีความซับซ้อนมากขึ้นเรื่อย ๆ จนถึงขั้นที่เรียกว่า เกินขีดจำกัดของจินตนาการไปแล้ว พันธมิตรแห่งความชั่วร้ายในโลกไซเบอร์ ในโลกของอินเตอร์เน็ตทุกวันนี้ หากพิจารณาถึงเรื่องของการรักษาความปลอดภัยของระบบแล้ว คงไม่มีสิ่งใดที่เปรียบเทียบได้ชัดเจนไปกว่า การทำสงคราม เพราะเป็นเรื่องของฝ่ายที่ต้องการโจมตี รุกราน ยึดครอง และแสวงหาผลประโยชน์ กับอีกฝ่ายหนึ่งซึ่งต้องทำหน้าที่ปกป้องคุ้มครองทรัพยากรของตนเองอย่างสุดความสามารถ สงครามในโลกไซเบอร์นี้ก็ไม่แตกต่างอะไรนัก กลยุทธในสงครามจริง ๆ เป็นอย่างไรก็สามารถนำมาใช้ได้เช่นเดียวกันเช่นกัน ความพ่ายแพ้ในสงครามแทบทุกครั้ง มักจะเกิดขึ้นจากหนอนบ่อนไส้บ้าง เกลือเป็นหนอนบ้าง การส่งหน่วยปฏิบัติการพิเศษ( ทำตัวเหมือนหนอนหรือไส้เดือน ) ขุดอุโมงค์เข้าไปเปิดประตูเมืองข้าศึกบ้าง ล้วนแล้วแต่เป็นกลยุทธที่ประสบความสำเร็จได้ผลมาแล้วนักต่อนัก คงไม่แปลกหากหนอนอินเตอร์เน็ต หรือ Worm ไวรัสชนิดที่ครองอันดับต้นๆ ในการปรากฏตัว และสร้างความเสียหายให้กับระบบคอมพิวเตอร์ในปัจจุบันจะกลายเป็นอีกกลยุทธหนึ่งที่จะนำมาซึ่งชัยชนะแก่บรรดาแครกเกอร์ที่จ้องทำลายระบบในสงครามยุคดิจิตอล เพียงแค่ใช้ไวรัสที่มีอยู่มากมายให้เกิดประโยชน์เท่านั้น เจ้าหนอน..อาวุธร้ายทะลวงระบบ เซิร์ฟเวอร์ที่ตกเป็นเป้าหมายไม่ว่าจะเป็นระบบปฏิบัติการลีนุกซ์ หรือวินโดวส์ก็ตามล้วนแล้วแต่มีโอกาสถูกเจาะได้โดยเจ้าหนอนอินเตอร์เน็ตด้วยกันทั้งนั้น เพียงแต่เจ้าหนอนที่จ้องทำลายระบบลีนุกซ์นั้นมีจำนวนน้อยกว่าในระบบวินโดวส์เท่านั้น ดังนั้นไม่ว่าจำนวนไวรัส หนอนที่มีจะมากหรือน้อยกว่าก็ไม่ใช่เรื่องสำคัญ เพราะถึงอย่างไรก็ไม่อาจหลีกเลี่ยงการเผชิญหน้าไปได้ โอกาสได้เสียจึงมีเท่าเทียมกัน สายพันธุ์ของหนอนอินเตอร์เน็ตทั้งหลายมีอยู่มากมาย มีอยู่จำนวนหนึ่งที่เป็นสำหรับระบบปฏิบัติการลีนุกซ์โดยเฉพาะ เจ้าหนอนประเภทนี้จะเจาะไชเข้าสู่ระบบโดยอาศัยช่องโหว่เกี่ยวกับ Buffer Overflow ในส่วนประกอบทางซอฟต์แวร์บางอย่าง เช่น SSL เมื่อสามารถเข้าไปฝังตัวในระบบได้แล้วก็จะทำการเปิดช่องทางการสื่อสารใหม่ขึ้น เปิดทางสะดวกให้แก่แครกเกอร์ผู้ชั่วร้ายเดินเข้าออกเซิร์ฟเวอร์ที่ตกเป็นเหยื่อได้อย่างสะดวกสบาย นอกจากนี้ไวรัสหนอนบางตัวยังสามารถดักจับการกดปุ่มคีย์บอร์ดของผู้ใช้งาน เช่น ชื่อและรหัสผ่าน หมายเลขบัตรเครดิต แล้วบันทึกเก็บไว้เป็นของกำนัลแก่แครกเกอร์อีกต่างหาก นับว่าเป็นอันตรายมากทีเดียว


รายชื่อไวรัสในลีนุกซ์บางส่วนที่รวบรวมไว้โดย McAfee

ในความจริงแล้วบรรดาหนอนอินเตอร์เน็ตเหล่านี้ล้วนมีต้นกำเนิดมาจากโค๊ดที่แครกเกอร์ได้สร้างขึ้นเพื่อใช้เจาะระบบโดยเฉพาะอยู่แล้ว เพียงแต่จำนวนโค๊ดที่มีการปรับปรุงเพื่อขยายขีดความสามารถให้เปลี่ยนจาก Exploit Code กลายเป็น Virus นั้นมีจำนวนไม่มากเท่ากับในฝั่งวินโดวส์เท่านั้น สำหรับไวรัสที่พบว่ามีคุณสมบัติเป็นผู้เปิดทางสะดวกให้แก่แครกเกอร์ และยังอยู่ในอันดับต้น ๆ ของไวรัสในปัจจุบัน ได้แก่
  • Fizzer สามารถดักการกดปุ่มของผู้ใช้เครื่อง หยุดการทำงานของโปรแกรม Security ในระบบ มีการทำงานแบบ Backdoor Trojan เปิดโอกาสให้แครกเกอร์เข้ามาได้ และแพร่กระจายตัวเองไปได้ด้วย SMTP ( โปรโตคอลจัดส่งอีเมล์ ) ที่มีอยู่ในตัวเอง
  • Bugbear.B และ PSWBugbear.B สามารถทำลายไฟล์ได้เป็นจำนวนมาก ดักจับการป้อนข้อมูลต่างๆ ของผู้ใช้ทางคีย์บอร์ด ยุติโปรแกรมด้าน Security และ Firewall แล้วเปิดพอร์ตสื่อสารหมายเลข 1080 ให้แก่ Cracker ที่จะเข้ามาล้วงเอาข้อมูลที่ดักไว้ออกไปได้อีกด้วย

  • Rootkits ไม่เพียงแต่การเข้าถึงทรัพยากรต่าง ๆ ในเซิร์ฟเวอร์เป้าหมายเท่านั้น แครกเกอร์ยังมีวิธีการที่จะฝังโปรแกรมบางอย่างไว้เพื่อการย้อนกลับมายังเซิร์ฟเวอร์นี้อีกครั้งในภายหลัง โดยหลบซ่อนอยู่ในรูปของโปรแกรมยูทิลิตี้ของระบบเองซึ่งผู้ดูแลระบบไม่อาจทราบได้ว่ามีสิ่งแปลกปลอมเหล่านั้นอยู่ที่ใดบ้าง เราเรียกโปรแกรมประเภทนี้ว่า Rootkits เมื่อใดที่ Rootkits ถูกติดตั้งลงสู่ระบบ การตรวจสอบเพื่อค้นหาความเปลี่ยนแปลงที่เกิดขึ้นเป็นสิ่งที่กระทำได้ยากหากไม่มีการเตรียมการล่วงหน้าไว้ก่อน Rootkits จะอาศัยอยู่ในระบบและทำงานราวกับเป็นส่วนหนึ่งของระบบ แต่ก็อาจจะมีข้อสังเกตบางประการที่ทำให้เราเห็นได้ ยกตัวอย่างเช่น โปรแกรม Rootkits รุ่นล่าสุดของลีนุกซ์ โปรแกรม login ที่ถูกแฮกมาแล้วจะมีทำงานคล้ายกับโปรแกรม login เดิมของระบบทุกอย่างยกเว้นจะทำงานช้าลงกว่าปรกติเท่านั้น Rootkits ในระบบปฏิบัติการยูนิกซ์และลีนุกซ์ จะประกอบไปด้วยโปรแกรมยูทิลิตี้เป็นจำนวนมาก ส่วนหนึ่งจะเป็นโปรแกรม ( หรือคำสั่ง ) พื้นฐานของระบบเองแต่ถูกดัดแปลง ( hacked ) ให้มีการทำงานบางอย่างที่เอื้อประโยชน์ต่อแครกเกอร์ เช่น login ,top ,sshd ,netstat ,ifconfig เป็นต้น โดยส่วนใหญ่แล้วจะเป็นคำสั่งที่มีลักษณะดังนี้
  • ต้องถูกเรียกใช้งานบ่อย เพื่อเปิดโอกาสให้แก่แครกเกอร์มากขึ้นนั่นเอง เช่น mount,
  • เกี่ยวข้องกับข้อมูลสำคัญ เพื่อการดักเก็บข้อมูลที่เป็นประโยชน์ต่อการโจมตีหรือเจาะระบบต่อไปในอนาคต เช่น โปรแกรม login จะดักจับรหัสผ่านของยูสเซอร์ เป็นต้น
  • เป็นคำสั่งที่ถูกใช้งานโดยผู้ดูแลระบบเอง เพื่อการยกระดับสิทธิขึ้นสู่ผู้ดูแลระบบ และกระทำงานที่ส่งผลสำคัญต่อระบบโดยตรง
  • เป็นคำสั่งหรือโปรแกรมที่สัมผัสกับระบบเครือข่ายโดยตรง และทำงานในลักษณะรอคอยอยู่ในระบบ เพื่อให้แครกเกอร์สามารถอาศัยเป็นช่องทางในการเข้าสู่ระบบอีกครั้งตามที่ต้องการ หรือสามารถทำงานบางอย่างให้แก่เแครกเกอร์ได้อย่างต่อเนื่อง ( เช่น ทำ Denial of Services ) เช่น sshd ,in.ftpd ,top ,rshd

    ค้นหาและกำจัดหน่วยแทรกซึมในระบบลีนุกซ์ เครื่องมือป้องกันระบบจากปัญหาของการฝังตัว Rootkits นี้เรานิยมใช้ซอฟต์แวร์ระบบรักษาความปลอดภัยที่เรียกว่า Intrusion Detection System หรือ IDS ซึ่งมีโปรแกรมโอเพ่นซอร์สในกลุ่มนี้อยู่มากมาย ในบทความนี้ผู้เขียนจะหยิบยกเอาหนึ่งในโปรแกรมที่นิยมใช้กันมากที่สุดมาให้รู้จักกัน คือ โปรแกรม chkrootkit ซึ่งเป็นโปรแกรมประเภท rootkits detection เวอร์ชั่นปัจจุบันคือ 0.39a พัฒนาขึ้นโดย Nelson Murilo และ Klaus Steding-Jessen เริ่มตั้งแต่ปี คศ.1997 เป็นต้นมาและรีลีสอัพเดตความสามารถในการตรวจจับ Rootkits รุ่นใหม่ๆ มาอย่างต่อเนื่อง chkrootkit สร้างขึ้นจากเชลล์สคริปต์ธรรมดา ทั้งนี้เพื่อให้มีความคล่องตัวสูงในการนำไปใช้งาน และสามารถทำงานได้ทุกกับยูนิกซ์ทุกตระกูล นอกจากนี้ยังมีโปรแกรมยูทิลิตี้ขนาดเล็กที่เขียนด้วยภาษาซีอีกจำนวนหนึ่งเพื่อใช้ตรวจหาร่องรอยของแครกเกอร์ในไฟล์ไบนารี่ซึ่งเชลล์สคริปต์ไม่สามารถกระทำได้ไว้ด้วย ตัวอย่างเช่น ifpromisc.c หนึ่งในโปรแกรมภาษาซีนี้จะทำหน้าที่ตรวจสอบและยืนยันว่าการ์ดอินเทอร์เฟสของเราจะไม่ทำงานใน promiscuous mode ซึ่งจะเอื้อประโยชน์แก่ Sniffer จริงอยู่ที่คุณสามารถตรวจสอบได้ง่ายกว่าด้วยคำสั่ง ifconfig แต่น่าเสียดายที่ Rootkits ส่วนใหญ่จะทำการโมดิฟายเจ้าคำสั่ง ifconfig นี้ไปเรียบร้อยแล้ว ดังนั้นคำตอบที่ได้อาจจะไม่จริงเสมอไป โปรแกรม chkrootkit สามารถตรวจค้นหาการถูกแก้ไขโปรแกรมไบนารี่ต่าง ๆ ของเราได้ เช่น sshd ,ifconfig ,telnet ,top รู้จักกับ Rootkits นานาชนิดกว่า 30 ตัว ตั้งแต่ t0rn ,lrk3 ,lrk4 ,lrk5 ,lrk6 รวมทั้ง "เจ้าหนอน" ตัวแสบอย่างเช่น Adore ,Lion ,Ramen โดยปรกติแล้วระบบปฏิบัติการของเราจะมีกลไกที่จะบันทึกการเข้ามาของผู้ใช้ไว้ใน Last Log ( wtmp ) แต่ตัวแสบที่แวะเข้ามาเยี่ยมเซิร์ฟเวอร์ของเราก็ฉลาดพอที่จะกลบเกลื่อนร่องรอยเหล่านั้นก่อนจะจากไป โปรแกรมchkrootkit ยังมีโปรแกรมภาษาซีอีกจำนวนหนึ่ง คือ check_wtmpx.c ,chkdirs.c ,chklastlog.c ,chkproc.c ,chkwtmp.c ซึ่งจะช่วยตรวจสอบว่า มีผู้ไม่ประสงค์ดีเข้ามาในระบบและทำการลบ Log ต่าง ๆ ไปหรือไม่ ติดตั้ง chkrootkits ก่อนอื่นคงจะต้องไปดาวน์โหลดโปรแกรม chkrootkit นี้มาเสียก่อนจากเว็บไซต์ http://www.chkrootkit.org ไฟล์ที่ผู้เขียนได้มาเป็น chkrootkit-0.39a.tar.gz ขนาดประมาณ 28KB นำมาไว้ที่ /root แล้ว Extract ออกมา และคอมไพล์โปรแกรมซีดังต่อไปนี้ cd /root
    tar -xzf chkrootkit-0.39a.tar.gz
    cd chkrootkit-0.39a
    make sense
    ./chkrootkit
    การรันโปรแกรมคำสั่ง chkrootkit ข้างต้นจะได้ผลลัพธ์แสดงออกมาดังรูปที่ 2 จะเห็นว่าระบบของเราจะได้รับการตรวจสอบอย่างละเอียด ตั้งแต่ไฟล์คำสั่งที่สำคัญ ไฟล์ล๊อกต่าง ๆ ตำแหน่งที่อยู่ที่โทรจัน rootkits ยอดนิยมทั้งหลายจะฝังตัวอยู่ ค้นหา "หนอนอินเตอร์เน็ต" "bindshell" "LKM" ( Loadable Kernel Modules ) ตรวจสอบโหมดของอินเทอร์เฟสว่าง่ายต่อการ Sniffer หรือไม่ ทั้งหมดใช้เวลาไม่นานนักทั้งนี้ขึ้นอยุ่กับขนาดของล๊อกไฟล์เป็นสำคัญ


    ผลลัพธ์บางส่วนขณะตรวจระบบด้วย chkrootkit

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


    แสดงปัญหาในระบบที่ตรวจพบ

    เนื่องจากโปรแกรม chkrootkit เองเป็นโปรแกรมเชลล์สคริปต์ดังนั้นจึงต้องทำงานโดยอาศัยคำสั่งต่าง ๆ ที่มีอยู่ระบบปฏิบัติการด้วยเช่นกัน เช่น find, awk ,grep,netstat หากไฟล์เหล่านั้นถูกแทนที่ด้วย Rootkits ไปแล้ว ย่อมส่งผลต่อการทำงานของ chkrootkit เองด้วย ดังนั้นจึงควรกำหนดให้ chkrootkit ใช้คำสั่งที่เราแน่ใจว่าเป็นของแท้ไม่มีการปลอมแปลงมาก่อนได้ด้วย พารามิเตอร์ -p เช่น ./chkrootkit -p /path/to/find:/path/to/awk:/path/to/grep


    คำสั่งอื่น ๆ ของ chkrootkit

    สำหรับในสังคมโอเพ่นซอร์สแล้วทั้งโปรแกรม Rootkits และโปรแกรมที่ใช้ค้นหาและกำจัด Rootkits ล้วนแล้วแต่เป็นโปรแกรมที่มีการเปิดเผยโปรแกรมต้นฉบับด้วยกันทั้งนั้น ในโลกของคอมพิวเตอร์และอินเตอร์เน็ตจึงไม่แตกต่างอะไรกับในโลกของความเป็นจริงที่มีการสร้างอาวุธที่ใช้ทำลายล้างกันอยู่ตลอดเวลา หากเรารู้จักนำความรู้นั้นมาพัฒนาอย่างสร้างสรรค์ซอฟต์แวร์ระบบปฏิบัติการของเราก็จะเข้มแข็งขึ้น ได้ซอฟต์แวร์ที่มีคุณภาพดียิ่งขึ้น แต่หากเรานำความรู้เหล่านั้นมาใช้ในทางตรงกันข้ามย่อมสร้างความเดือดร้อนปราศจากความสงบสุขได้เช่นกัน