2009-03-03

Syslog-ng (Syslog new generation)

ผู้ดูแลระบบ *nix ส่วนใหญ่คงคุ้นเคยกับ syslog มาเป็นอย่างดี เพราะ syslog ถือได้ว่าเป็น log daemon ที่ใช้กันมาอย่างยาวนานและกลายเป็นมาตรฐานของการเก็บข้อมูลล็อกของระบบปฏิบัติการ *nix ในหลายๆ ตัว แต่อย่างไรก็ตาม syslog ก็มีข้อเสียบางอย่าง ที่ log daemon ตัวอื่น เช่น syslog-ng, msyslog สามารถแก้ไขข้อบกพร่องดังกล่าวได้ เอกสารฉบับนี้จะแนะนำ syslog-ng ซึ่งเป็น log daemon ตัวใหม่ที่กำลังเป็นที่นิยมกันมากขึ้น และจะกล่าวถึงการสร้าง configuration แบบละเอียดเพื่อให้สามารถนำ syslog-ng ไปใช้งานได้จริง

แนะนำ Syslog-ng (Syslog new generation)
syslog-ng สามารถแก้ไขข้อบกพร่องส่วนใหญ่ของ syslog ได้ โดย


syslog-ng สามารถทำงานได้ทั้งบน TCP และ UDP

syslog-ng สามารถทำการกรอง (filter) ข้อมูลได้ด้วย regular expression

syslog-ng สามารถทำงานในรูปแบบที่อ้างอิง priority/facility ได้ ดังนั้น มันจึงสามารถทำงานแทนที่ syslog ได้

syslog-ng สนับสนุน log forwarding ซึ่งทำให้สามารถทราบได้ว่า ต้นทางของล็อกถูกส่งมาจากเครื่องใด และผ่านเครื่องใดมาบ้าง

นอกจากนี้ syslog-ng ยังมีรูปแบบของไฟล์ configuration ที่ง่าย แต่มีความยืดหยุ่นสูง สามารถนำไปประยุกต์ใช้ให้ตรงความต้องการได้โดยง่าย

การติดตั้ง Syslog-ng
syslog-ng ได้ถูกติดตั้งไว้แล้วใน Debian แต่ในระบบปฏิบัติการอื่นนั้น ผู้ดูแลระบบจะต้องติดตั้งเองโดยการคอมไพล์จาก source ทั้งนี้จะต้องติดตั้ง libol ก่อนจึงจะสามารถติดตั้ง syslog-ng ได้

ผู้ดูแลระบบสามารถดาวน์โหลด libol และ syslog-ng ได้จาก http://www.balabit.com/downloads/ หลังจากนั้นให้ขยายไฟล์ออกมา และทำการติดตั้งดังคำสั่งด้านล่างนี้

# cd libol-x.x
# ./configure; make; make install

# cd syslog-ng-x.x
# ./configure --sysconfdir=/etc; make; make install

คำสั่งด้านบนจะทำการติดตั้ง syslog-ng ไปไว้ที่ตำแหน่งโดยดีฟอลต์ (default location) คือ /usr/local หากต้องการติดตั้ง syslog-ng ไปยัง path อื่นให้ใช้คำสั่ง ./configure --prefix=/your/dir/

หลังจากการติดตั้งแล้ว ผู้ดูแลระบบจำเป็นต้องดำเนินการบางอย่างเพื่อให้ syslog-ng ทำงานได้ตามปกติ ดังนี้

สร้างไดเรกทอรี /etc/syslog-ng
สร้างไฟล์ configuration ของ syslog-ng (หรือคัดลอกมาจากไดเรกทอรี contrib/ และ doc/) ไว้ที่ /etc/syslog-ng/syslog-ng.conf
สร้าง startup script ของ syslog-ng ไว้ที่ /etc/init.d/syslog-ng รวมทั้งสร้าง symbolic link จาก run level ต่างๆ เช่น /etc/rc2.d, /etc/rc3.d, /etc/rc5.d) ผู้ดูแลระบบสามารถคัดลอกตัวอย่าง startup script ของระบบปฏิบัติการที่ต้องการได้จากไดเรกทอรี contrib/
การใช้งาน syslog-ng
ผู้ดูแลระบบควรรัน syslog-ng ภายหลังการสร้างไฟล์ configuration เสร็จสิ้นแล้วเท่านั้น โดย syslog-ng มีออปชันในการรันค่อนข้างง่าย ดังตารางที่ 1

ตารางที่ 1 syslog-ng command line options
Flag Description
-d แสดงข้อความดีบัก
-v แสดงข้อความดีบักมากกว่าเดิม (verbose)
-f filename ใช้ filename เป็นไฟล์ configuration (default = /etc/syslog-ng/syslog-ng.conf)
-V แสดงหมายเลขเวอร์ชัน
-p pidfilename ตั้งชื่อไฟล์ proce-ID (default = /var/run/syslog-ng.pid)

Configuring Syslog-ng
Configuration ของ syslog-ng มีความยุ่งยากมากกว่าของ syslog แต่ก็ให้ประโยชน์ในแง่ของความยืดหยุ่นที่ได้และความสามารถที่มีมากกว่า หลังจากที่ทำความเข้าใจ configuration แล้ว ผู้ดูแลระบบสามารถสร้างไฟล์ configuration ง่ายๆ ขึ้นมาได้ด้วยตัวเอง และสามารถปรับปรุงให้เหมาะสมกับระบบของตนต่อไป

โดยปกติแล้ว syslog-ng จะอ่านข้อมูล configuration จากไฟล์ /etc/syslog-ng/syslog-ng.conf

ตัวอย่างที่ 1 แสดง configuration อย่างง่ายของ syslog-ng
options {
use_fqdn(no);
sync(0);
};

source s_sys { unix-stream("/dev/log"); internal(); };
source s_net { udp(); };

destination d_security { file("/var/log/security"); };
destination d_meages { file("/var/log/meages"); };
destination d_console { usertty("root"); };

filter f_authpriv { facility(auth, authpriv); };
filter f_meages { level(info .. emerg) and not facility(auth, authpriv); };
filter f_emergency { level(emerg); };

log { source(s_sys); filter(f_authpriv); destination(d_security); };
log { source(s_sys); filter(f_meages); destination(d_meages); };
log { source(s_sys); filter(f_emergency); destination(d_console); };


จากตัวอย่างจะเห็นได้ว่า ส่วนประกอบหลักของ configuration ประกอบไปด้วย 5 statement หลักคือ options{}, source{}, destination{}, filter{}, log{} ซึ่งแต่ละ statement จะคั่นด้วยเครื่องหมาย semicolon(;)

จะเห็นได้ว่ารูปแบบ configuration ของ syslog-ng.conf จะคล้ายคลึงกับรูปแบบของภาษาซี (C) ซึ่งทุกๆ statement จะต้องลงท้ายด้วยเครื่องหมาย semicolon ส่วน whitespace หรือช่องว่างนั้นไม่มีผลใดๆ ใน configuration จะใช้งานเพียงเพื่อให้สามารถอ่านได้ง่ายเท่านั้น

Global options
เป็นออปชันที่ถูกประกาศใช้งานภายใน options {} statement ซึ่งบางออปชันนั้นนอกจากสามารถใช้งานได้ใน option {} เองแล้วยังสามารถใช้งานใน statement อื่น เช่น source {}, destination {}, filter {}, log {} ได้อีกด้วย

ตารางที่ 2 options{}
Option Description
chain_hostnames( yes | no ) หลังจากแสดง hostname ของเครื่องที่ส่งล็อกมายังเครื่องนี้ผ่านทาง tcp/udp แล้ว ให้แสดง hostname ของทุกเครื่องที่ข้อมูลล็อกถูก handle (โดย syslog-ng) มาตลอดทาง ซึ่งเหตุการณ์นี้จะเกิดขึ้นเมื่อล็อกถูกส่งต่อจาก syslog-ng server ไปยัง syslog-ng server อื่นๆ เป็นทอดๆ (default = yes)
keep_hostname( yes | no ) ให้เชื่อใจ (trust) ค่า hostname ที่อยู่ใน tcp/udp message (default = no)
use_fqdn( yes | no ) บันทึก full name ของเครื่องที่ส่ง tcp/udp message (default = no)
use_dns( yes | no ) ให้ resolve ค่า IP address ในข้อมูลล็อก เป็น hostname (default = yes)
use_time_recvd( yes | no ) ตั้งค่า message timestamp เป็นเวลาที่ล็อกเดินทางมาถึง ซึ่งโดยปกติแล้วจะใช้เวลาที่ระบุในล็อก (default = no)
time_reopen( NUMBER ) เมื่อมีแพ็กเกต tcp ที่สูญหายระหว่างทางหรือเหตุที่ทำให้ไม่สามารถสื่อสารได้ตามปกติ syslog-ng จะพยายามสร้างการสื่อสารใหม่ขึ้นมา โดยจะรอเวลาตามที่ระบุ (NUMBER) หน่วยเป็นวินาที (default = 60)
time_reap( NUMBER ) เมื่อ syslog-ng เปิดไฟล์ที่เป็น inactive file (ไม่มีการเขียนข้อมูลลงไฟล์) syslog-ng จะพยายามปิดไฟล์ดังกล่าว โดยจะรอเวลาตามที่ระบุ (NUMBER) หน่วยเป็นวินาที (default = 60)
log_fifo_size( NUMBER )a ขนาดของ message ที่จะถูกนำไปเข้าคิวในหน่วยความจำก่อนที่จะถูกประมวลผล

ถ้าคิวเต็มและ syslog-ng ไม่สามารถทำงานได้ตามปกติ (busy) ข้อความล็อกที่ส่งเข้ามาจะถูกละทิ้ง แต่หากระบุขนาด FIFO จำนวนมากเกินไปก็จะทำให้สิ้นเปลืองหน่วยความจำ (default = 100)

sync( NUMBER )a จำนวนบรรทัดของ message ที่จะเขียนลงไฟล์ก่อนที่ไฟล์จะถูก synchronize (default = 0)
owner( string )a ตั้งค่าชื่อ user สำหรับไฟล์ล็อกที่ syslog-ng สร้างขึ้นมาใหม่ (default = root)
group( string )a ตั้งค่าชื่อ group สำหรับไฟล์ล็อกที่ syslog-ng สร้างขึ้นมาใหม่ (default = root)
perm( NUMBER )a ตั้งค่า file permission สำหรับไฟล์ล็อก (default = 0600)
create_dirs( NUMBER )a เป็นตัวบอกว่าจะให้ syslog-ng สร้างไดเรกทอรีใหม่ได้หรือไม่ ในกรณีที่ path ที่ระบุไม่มีอยู่จริงในระบบ (default = no)
dir_owner( string )a ตั้งค่าชื่อ user สำหรับไดเรกทอรีที่ syslog-ng สร้างขึ้นมาใหม่ (default = root)
dir_group( string )a ตั้งค่าชื่อ group สำหรับไดเรกทอรีที่ syslog-ng สร้างขึ้นมาใหม่ (default = root)
dir_perm( NUMBER )a ตั้งค่า directory permission เมื่อ syslog-ng สร้างไดเรกทอรีใหม่ (default = 700)
a : ออปชันที่สามารถนำไปใช้กับ file() ใน destination{} ได้

สำหรับออปชันที่เกี่ยวข้องกับ hostname ได้แก่ chain_hostnames(), keep_hostname(), use_fqdn() และ use_dns() นั้น สนใจเฉพาะค่า hostname ของเครื่องที่ส่งล็อกมาเท่านั้น ไม่เกี่ยวข้องกับ hostname ที่ระบุใน message body แต่อย่างใด

use_dns()
เช่น หากใน syslog-ng.conf มี statement ดังต่อไปนี้

options { use_dns(yes); };

และเครื่อง joe-chong ซึ่งมีไอพีเป็น 10.0.0.7 ส่งล็อกดังต่อไปนี้มาที่ log server

Oct 13 19:56:56 s_sys@10.0.0.7 sshd[1222]: Accepted publickey for ROOT from 10.0.0.222 port 1355 ssh2

เครื่อง log server จะทำการบันทึกล็อกดังนี้

Oct 13 19:56:56 s_sys@joe-chong sshd[1222]: Accepted publickey for ROOT from 10.0.0.222 port 1355 ssh2

จากตัวอย่างจะเห็นว่าไอพี 10.0.0.7 นั้นถูก resolve ให้เป็น joe-chong แต่ข้อมูลไอพีอื่นที่อยู่ใน message body คือ 10.0.0.222 นั้น ไม่ได้ถูก resolve ไปด้วย ดังนั้นจึงสรุปได้ว่าออปชัน use_dns(yes) นั้นจะทำการ resolve เฉพาะ hostname ที่อยู่ในส่วนต้นบรรทัดของ message เท่านั้น

นอกจากนี้ออปชันบางตัวที่เกี่ยวข้องกับไฟล์และไดเรกทอรี ยังสามารถใช้งานได้ทั้งใน global options() และ destination() ซึ่งก็คือ modifier ของออปชัน file() เช่น owner(), group() เป็นต้น ทั้งนี้หากมีการระบุค่าออปชันบางตัวที่ซ้ำกันใน options() section และ section อื่นๆ ค่าที่ระบุใน section อื่นๆ จะถูกนำไปใช้แทนที่ค่าใน options() section

keep_hostname() เป็นออปชันที่ใช้งานค่อนข้างมาก ซึ่งจะตั้งค่าดีฟอลต์เป็น no ซึ่งหมายถึง syslog-ng จะไม่ใช้ค่า hostname ที่ส่งมา มันจะทำการ resolve หา hostname จาก source IP address ของแพ็กเกตที่ส่งล็อกเข้ามา เพื่อป้องกันการปลอม hostname จากเครื่องที่ส่งล็อกเข้ามา ซึ่งจะแตกต่างจาก syslog ซึ่งใช้ค่า hostname ตามที่ได้รับมาจาก log message

chain_hostnames() โดยดีฟอลต์มีค่าเป็น yes ซึ่งหมายถึง syslog-ng จะแสดงรายชื่อ host ทุก host ที่ message ถูกส่งต่อมา (relayed by syslog-ng) โดย host ดังกล่าวต้องเป็น host ที่ติดตั้ง syslog-ng และทำหน้าที่ redirect ข้อมูลล็อกมายัง log server (ไม่ใช่ host ที่เป็น network host ตามปกติ เช่น router, firewall)

ตัวอย่างที่ 2 แสดงผลของการใช้งาน keep_hostname() และ chain_hostnames() ซึ่งทั้งสองค่าถูกตั้งค่าดีฟอลต์ให้เป็น yes โดยในตัวอย่างข้อมูลล็อกจะถูกสร้างขึ้นโดยเครื่องปัจจุบัน (locally) จากนั้นจะถูกส่งต่อไปยัง host1 ซึ่งมี hostname จริงๆ เป็น "linux" ซึ่งจะส่งข้อมูลล็อกต่อไปยัง host2 โดย host2 จะทำหน้าที่ตรวจสอบ hostname ผ่านทาง DNS จากนั้นล็อกจึงจะถูกส่งต่อไปยัง host3 ต่อไป

ตัวอย่างที่ 2 แสดงตัวอย่างล็อกที่ถูกส่งต่อผ่านโฮสต์ Original log entry on host1:
Oct 9 23:57:16 s_loc@linux syslog-ng[1656]: syslog-ng version 1.4.13 starting

Entry as sent to and recorded by host2:
Oct 9 23:57:16 s_loc@linux/host1 syslog-ng[1656]: syslog-ng version 1.4.13 starting

Same log entry as relayed from host2 to host3:
Oct 9 23:57:16 s_loc@linux/host1/host2 syslog-ng[1656]: syslog-ng version 1.4.13 starting


สิ่งที่น่าสนใจจากตัวอย่างที่ 2 คือ

เมื่อ host2 บันทึกข้อมูลล็อก ตัว syslog-ng ได้ตรวจสอบข้อมูลจาก DNS แล้วพบว่า จริงๆ แล้ว host1 นั้นมี DNS name เป็น linux แต่ syslog-ng เองก็ยังไม่มั่นใจ จึงเพิ่ม hostname "linux" ต่อท้าย hostname "host1" (host1 อาจจะเป็นชื่อที่ปลอมมา)
timestamp ที่ระบุในล็อกทั้งสามชุดมีเวลาที่ตรงกัน ซึ่งหมายถึง เวลาที่เห็นนั้นถูกสร้างขึ้นจากเครื่องที่ให้กำเนิดล็อกแล้วจึงส่งล็อกต่อไปเรื่อยๆ ผ่านโฮสต์ต่างๆ ซึ่งโฮสต์เหล่านั้นไม่ได้ตั้งค่า use_time_recd() ให้เป็น yes โฮสต์ต่างๆ จึงไม่ได้แก้ไขข้อมูล timestamp จึงมีผลให้เวลาทั้งสามจุดตรงกันหมด
จากข้อมูลล็อกที่ host1 จะพบคำว่า s_loc อยู่ ซึ่งค่าดังกล่าวเป็นค่า source{} ของ syslog-ng ที่อยู่บน host1
ตัวอย่างที่ 3 แสดง configuration ของ syslog-ng บนเครื่อง host1 options{};
source s_loc {unix-stream("/dev/log"); internal(); };
destination d_host2 { udp("host2" port(514)); };
destination d_local { file("/var/log/messages"); };
log { source(s_loc); source(s_net); destination(d_host2); destination(d_local); };


Sources
จากตัวอย่างที่ 3 มีการประกาศค่า source{} หนึ่งครั้ง โดยข้อมูลภายใน source{} ซึ่งก็คือ source driver ทำหน้าที่ระบุถึงแหล่งที่มาของข้อมูลล็อก ทั้งนี้ใน syslog-ng.conf หนึ่งๆ สามารถประกาศ source{} ได้ไม่จำกัดครั้ง ซึ่งภายใน source{} แต่ละตัวนั้นสามารถบรรจุ driver ได้ไม่จำกัดเช่นกัน

รูปแบบการประกาศ source{}

source sourcelabel1 { drivers([options]); drivers([options]); etc. };

โดย sourcelabel หมายถึง string ที่ใช้เพื่ออ้างอิงกลุ่มของ source driver เพื่อให้สามารถนำไปใช้งานต่อได้อย่างสะดวก เช่น

source s_loc { unix-stream("/dev/log"); internal(); };

จากบรรทัดด้านบน s_loc เป็นชื่อที่ถูกใช้เพื่ออ้างอิงถึงข้อมูลล็อกที่ถูกดึงมาจาก /dev/log และข้อมูลล็อกจาก syslog-ng เอง

syslog-ng มีความหยืดหยุ่นอย่างมากในการใช้งาน source driver ซึ่งสามารถรับข้อมูลล็อกได้จาก Unix socket เช่น /dev/log หรือล็อกจาก syslog-ng เอง รวมทั้งล็อกที่ส่งมาจากเครื่องอื่นผ่านทาง TCP, UDP protocol และยังสามารถรับล็อกจากไฟล์พิเศษเช่น ไฟล์ใน /proc ได้อีกด้วย ตารางที่ 3

ตารางที่ 3 Source drivers
Source Description
internal() ล็อกที่รับมาจาก syslog-ng daemon เอง
file("filename" [options]) ล็อกที่อ่านมาจากไฟล์ที่ระบุไว้ เช่น /proc/kmsg
pipe("filename") ล็อกที่รับมาจาก name pipe
unix-stream("filename" [options]) ล็อกที่รับมาจาก Unix socket ที่อยู่ในโหมด connection-oriented stream เช่น /dev/log (maximum concurrent connections default = 100)
unix-dgram("filename" [options]) ล็อกที่รับมาจาก Unix socket ที่อยู่ในโหมด connectionless datagram เช่น ล็อกของ klogd จาก /dev/log
tcp([ip(address)] [port(#)] [max-connections(#)] ) ล็อกที่รับมาจากเครื่องอื่นที่ส่งข้อมูลผ่านทาง TCP ตามหมายเลขพอร์ตที่ระบุ (default = 514) โดยรับข้อมูลจาก local network interface (default = all) และสามารถระบุจำนวน concurrent connections ได้ (default = 10)
udp([ip(address)] [port(#)]) ล็อกที่รับมาจากเครื่องอื่นที่ส่งข้อมูลผ่านทาง UDP ตามหมายเลขพอร์ตที่ระบุ (default = 514) โดยรับข้อมูลจาก local network interface (default = all)

internal()
syslog-ng เองจะส่งข้อมูลล็อก เช่น startup message, errors หรือล็อกอื่นๆ ไปยัง internal() ดังนั้นหากต้องการรับล็อกของตัวโปรแกรม syslog-ng จะต้องระบุ internal() ไว้ใน source{} ด้วย

file()
file() ใช้เพื่อระบุชื่อไฟล์ที่ต้องการให้ syslog-ng ไปดึงข้อมูลล็อกมา เช่น ไฟล์ /proc/kmsg ซึ่งเป็นไฟล์ข้อมูลล็อกของเคอร์เนลหากต้องการให้ syslog-ng ดึงข้อมูลล็อกจาก text file ปกติ เช่น ล็อกของ httpd นั้น จะต้องสร้างสคริปต์ขึ้นมาเพิ่มเติมเพื่อทำหน้าที่ pipe ผลลัพธ์ของคำสั่ง tail -f [filename] ไปยัง logger (ดูรายละเอียดเพิ่มเติมเกี่ยวกับการใช้งาน logger ได้จากคำสั่ง # man logger)

unix-stream(), unix-dgram()
เป็น source driver ที่สำคัญ โดยจะรับข้อมูลจากการเชื่อมต่อแบบ connection-oriented และ connectionless Unix socket สำหรับลีนุกซ์ที่ใช้เคอร์เนลเวอร์ชัน 2.4.1 หรือสูงกว่านั้น จะใช้งาน Unix datagram socket ดังนั้นหากต้องการเก็บข็อมูลล็อกของ /dev/log จะต้องใช้ unix-dgram("/dev/log") เท่านั้น จึงจะสามารถได้รับล็อกตามปกติ เช่น

source s_loc { unix-dgram("/dev/log"); internal(); };

หากใช้ลีนุกซ์ที่มีเวอร์ชันของเคอร์เนลเป็น 2.4.0 หรือต่ำกว่า จะต้องใช้ unix-stream() ในการเก็บข้อมูลล็อกจาก /dev/log

tcp(), udp()
ทั้ง tcp() และ udp() จะรับข้อมูลล็อกจาก remote host ผ่านทาง TCP protocol (connection-oriented) และ UDP protocol (connectionless) โดยทั้งคู่สามารถตั้งให้รอรับข้อมูลล็อกผ่านทาง IP address และ port ที่ระบุได้ โดยดีฟอลต์แล้ว syslog-ng จะรอรับการเชื่อมต่อที่ 0.0.0.0:514 ซึ่งหมายถึง "รอรับการเชื่อมต่อที่ทุก network interface, port 514"

การระบุ IP address มีประโยชน์สำหรับโฮสต์ที่มี network interface มากกว่าหนึ่ง และต้องการเปิดพอร์ตรอรับล็อกจากบาง interface เท่านั้น ดังตัวอย่างที่ 4

ตัวอย่างที่ 4 ตัวอย่างการระบุ ip, port ใน source{}
source s_tcpmessages { tcp( ip(192.168.1.19) port(10514) ); };
source s_udpmessages { ucp(); };


จากตัวอย่างที่ 4 ซึ่งกำหนดให้ s_tcpmessages รับข้อมูลล็อกทุกอันที่ส่งมายัง network interface ที่มีไอพีเป็น 192.178.190.190 TCP port 10514 ส่วน s_udpmessages นั้นรอรับข้อมูลล็อกทุกอันผ่านทาง UDP port 514 ในทุกๆ local network interface

ip(), port(), max_connections()
นอกเหนือจาก ip() และ port() แล้ว ยังมี max_connections() ซึ่งใช้ร่วมกับ tcp() เพื่อจำกัดจำนวนการเชื่อมต่อพร้อมกันสูงสุด ซึ่งการใช้งานออปชันนี้ต้องใช้ค่าที่เหมาะสมกับระบบ เพราะหากกำหนดค่าที่มากไปอาจจะมีผลให้ล็อกบางส่วนถูกทิ้ง (drop) ไปเมื่อเซิร์ฟเวอร์ทำงานเกินพิกัด หากกำหนดน้อยเกินไปและมีการเชื่อมต่อเพื่อส่งล็อกถึงขีดที่กำหนดไว้ จะมีผลให้ข้อมูลล็อกถูก drop ไป จนกระทั่งจะมีช่องว่างเพียงพอที่จะสร้างการเชื่อมต่อ

ตัวอย่างที่ 5 ตัวอย่างการใช้งาน max-connections()
source s_tcpmessages { tcp( ip(192.168.1.19) port(10514) max-connections(100)); };


ค่าดีฟอลต์ของ max-connections() สำหรับ unix-stream() มีค่าเป็น 100 และสำหรับ tcp() มีค่าเป็น 10

Destinations
syslog-ng สามารถเก็บข้อมูลล็อกในรูปแบบเดียวกันกับที่ syslog เก็บได้ ไม่ว่าจะเป็น ASCII file, name pipe, remote host (ผ่านทาง UDP) และแสดงผลออกทาง TTY นอกจากนี้ syslog-ng ยังสามารถส่งข้อมูลล็อกไปยัง Unix socket, remote host (ผ่าน TCP) และส่งต่อไปยัง standard input ของโปรแกรมอื่น

ตารางที่ 5 Destination drivers Driver Description
file("filename [$MACROS]") เก็บข้อมูลล็อกลง Ascii file ตามปกติ หาก syslog-ng ไม่พบไฟล์ตามที่ระบุ มันจะสร้างให้โดยอัตโนมัติ
ส่วน MACRO นั้น ใช้เพื่อกำหนดชื่อไฟล์แบบ dynamic เช่น ตั้งชื่อไฟล์ตาม facility ของข้อมูลล็อก
(โปรดอ่านรายละเอียดเพิ่มเติม ที่เอกสารเผยแพร่เรื่อง "ทำความรู้จักกับ syslogd" )

tcp("address" [port(#);]) ส่งข้อมูลล็อกไปยัง IP address หรือ hostname ที่ระบุผ่านทาง TCP port ที่ระบุ (default port = 514)
udp("address" [port(#);]) ส่งข้อมูลล็อกไปยัง IP address หรือ hostname ที่ระบุผ่านทาง UDP port ที่ระบุ (default port = 514)
pipe("pipename") ส่งข้อมูลล็อกไปยัง name pipe เช่น /dev/xconsole
unix-stream("filename" [options]) ส่งข้อมูลล็อกไปยัง Unix socket แบบ connection-oriented เช่น /dev/log
unix-dgram("filename" [options]) ส่งข้อมูลล็อกไปยัง Unix socket แบบ connectionless เช่น /dev/log
usertty(username) ส่งข้อมูลล็อกไปยัง console ของ user ที่ระบุ
program("/path/to/program") ส่งข้อมูลล็อกเพื่อนำไปเป็น standard input ของโปรแกรมที่ระบุ

syslog-ng สามารถเก็บข้อมูลลงไฟล์ได้และมีความสามารถมากกว่า syslog ตรงที่มีการใช้งานมาโคร มาโครช่วยให้สามารถตั้งชื่อไฟล์ที่ใช้เก็บข้อมูลล็อกได้อย่างน่าดี เช่น ตั้งชื่อไฟล์ตามปีเดือนวัน หรือตั้งชื่อไฟล์ตาม facility, priority

ตัวอย่างที่ 6 ตัวอย่างการใช้งานมาโคร destination d_dailylog { file("/var/log/messages.$WEEKDAY"); };


จากตัวอย่าง configuration ด้านบน เมื่อ syslog-ng ต้องการเขียนข้อมูลล็อกลงไฟล์ มันจะสร้างไฟล์ชื่อ /var/log/messages.Tues, /var/log/messages.Wed ซึ่งขึ้นกับวันที่เก็บข้อมูลล็อกดังกล่าว

ตารางที่ 6 Macros supported in file() destinations Macro Expands to
Program ชื่อของโปรแกรมที่ส่งล็อกเข้ามา
HOST ชื่อโฮสต์ที่เป็นจุดกำเนิดล็อก
FACILITY facility ของล็อกที่ถูกส่งเข้ามา
PRIORITY or LEVEL priority ของล็อกที่ถูกส่งเข้ามา
YEAR ปีปัจจุบันa
MONTH เดือนปัจจุบันa
DAY วันที่ปัจจุบันa
WEEKDAY วันปัจจุบันa เช่น Monday
HOUR ชั่วโมงปัจจุบันa
MIN นาทีปัจจุบันa
SEC วินาทีปัจจุบันa
a : หากออปชัน use_time_recvd() ถูกตั้งค่า yes แล้ว ข้อมูลเวลาจะอ้างอิงจาก local system ขณะที่ล็อกเดินทางมาถึง แต่หาก use_time_recvd() มีค่าเป็น no ก็จะอ้างอิงเวลาจากเวลาที่ปรากฎในข้อมูลล็อก
syslog-ng จะสร้างไฟล์ขึ้นมาใหม่ หากไฟล์ที่ระบุใน file() ไม่มีอยู่จริง นอกจากนี้ syslog-ng ยังสามารถกำหนดออปชันบางตัวในระดับทั่วไป (general rule) คือให้มีผลกับ configuration ทั้งไฟล์ได้ ขณะเดียวกันก็สามารถกำหนดออปชันในระดับ per-log-file ได้ ซึ่งการกำหนดออปชันชนิดหลังนี้จะเป็นการ overridden ออปชันในระดับ general rule

ตัวอย่างที่ 7 การควบคุม file() destination d_mylog { file("/var/log/ngfiles/mylog" create_dirs(yes)\
dir_owner(root) dir_group(root) dir_perm(700)); };


จากตัวอย่างที่ 7 เป็นการระบุออปชัน dir_owner(), dir_group(), dir_perm() ใน destination{} ซึ่งค่าที่ระบุนี้จะมีผลแทนที่ค่าที่ระบุใน options{} โดยอัตโนมัติ นอกจากนี้ยังสามารถระบุออปชัน owner(), group(), perm() ได้เช่นเดียวกันกับออปชันด้านบน

โดยปกติ syslog-ng จะสร้างไฟล์ล็อกที่ไม่มีอยู่ในระบบโดยอัตโนมัติ เว้นเสียแต่ว่าไฟล์ที่ระบุดังกล่าวจะอยู่ใน path ที่ไม่มีอยู่จริงและออปชัน create_dirs() ถูกตั้งค่าเป็น no

sync() ถูกใช้เพื่อจำกัดความถี่ในการ synchronize ไฟล์ล็อก หากมีค่าสูงๆ จะทำให้ข้อมูลล็อกถูกนำไปเก็บไว้ที่แคช (cache) เป็นจำนวนมากก่อนที่จะถูก synchronize หรือบันทึกลงไฟล์ล็อกต่อไป หาก sync() มีค่าต่ำ ก็เป็นการลดความเสี่ยงในการสูญเสียข้อมูล เพราะข้อมูลที่ถูกประมวลผลแล้วจะถูกบันทึกลงไฟล์ล็อกทันที

โดยดีฟอลต์แล้ว ค่าล็อกถูกตั้งค่าเป็นศูนย์ ซึ่งหมายถึงให้บันทึกข้อมูลล็อกทุกอันในทันที โดยปกติค่า sync() ต่ำๆ จะเหมาะสำหรับระบบที่ข้อมูลล็อกไม่เยอะมาก ส่วนระบบที่มีข้อมูลล็อกจำนวนมากควรใช้ค่า sync() สูง ซึ่งค่าระหว่าง 100 ถึง 1000 นั้นถือว่ามีค่าสูงพอสมควร ซึ่งผู้ดูแลระบบจะต้องทดสอบเพื่อหาค่าที่เหมาะสมกับระบบของตนต่อไป

อย่างไรก็ตามหากระบบที่ติดตั้ง syslog-ng ได้ติดตั้งโปรแกรมจำพวก log monitoring tool เช่น Swatch แล้วไม่ควรตั้งค่า sync() ไว้สูงมากนัก เพราะอาจจะทำให้ไม่สามารถแจ้งเตือนผู้ดูแลระบบได้ในกรณีที่ไฟล์ล็อกโดนลบ

Filters
filter หรือการกรองข้อมูลเป็นส่วนที่มีความสำคัญส่วนหนึ่ง นอกเหนือจากการกรองข้อมูลโดยใช้ facility, priority แล้ว syslog-ng ยังสามารถตรวจสอบชื่อโปรแกรมที่ส่งข้อมูลล็อกมา ชื่อเครื่องที่ทำหน้าที่ส่งต่อล็อกมา และยังสามารถกรองข้อมูลล็อกตาม regular expression ที่ตั้งไว้อีกด้วย

filter{} statement ประกอบไปด้วย label (ชื่อเรียกของ filter{} ชุดนั้นๆ) และคำสั่งในการกรองข้อมูลอย่างน้อย 1 คำสั่ง โดยสามารถใช้ and, or, not ในการเชื่อมคำสั่งในการกรองข้อมูลได้

ตารางที่ 7 filter{} funtions
Function (criteria) Description
facility( facility-name ) facility ที่ต้องการ
priority( priority-name )
priority( priority-name1, priority-name2, etc, )
priority( priority-name1 .. priority-name2 ) ระดับของ priority ที่ต้องการ
- สามารถใช้เครื่องหมาย comma (,) คั่น หากต้องการมากกว่าหนึ่งระดับได้
- สามารถใช้เครื่องหมาย .. แทน priority ที่ต้องการระหว่าง priority ที่กำหนดได้ เช่น info .. warn
level( priority-name ) เช่นเดียวกันกับ priority
program( program-name ) ชื่อโปรแกรมที่สร้างล็อกขึ้นมา
host( hostname ) ชื่อ host ที่ล็อกนี้ถูกสร้าง
match( regular-expression ) regular expression ที่จะถูกนำไปเปรียบกับกับส่วน body ของล็อก
filter( filter-name ) ชื่อ filter อื่นที่ต้องการนำมากรองอีกครั้ง

จากตัวอย่างที่ 8 แสดง syslog-ng.conf ในระบบปฏิบัติการลินุกซ์เดเบียน 2.2 (Debian 2.2)

ตัวอย่างที่ 8 ตัวอย่างการใช้งาน filter{}
filter f_mail { facility(mail); };
filter f_debug { not facility(auth, authpriv, news, mail); };
filter f_messages { level(info .. warn) and not facility(auth, authpriv, cron, daemon, mail, news); };
filter f_cother { level(debug, info, notice, warn) or facility(daemon, mail); };


บรรทัดแรกในตัวอย่างที่ 8 filter f_mail กรองได้ข้อมูลล็อกทุกอันที่อยู่ใน facility mail
บรรทัดที่สอง filter f_debug กรองได้ข้อมูลล็อกทุกอันยกเว้น facility auth, authpriv, news, และ mail
บรรทัดที่สาม filter f_messages กรองได้ข้อมูลล็อกทุกอันที่มี priority ตั้งแต่ info จนถึง warn ยกเว้นข้อมูลล็อกที่มี facility เป็น auth, authpriv, cron, daemon, mail, news
บรรทัดสุดท้าย filter f_cother กรองข้อมูลล็อกที่มี priority เป็น debug, info, notice และ warn หรือ ข้อมูลล็อกที่มี facility เป็น daemin และ mail

Log statements
หลังจากที่ทำความเข้าใจส่วนประกอบต่างๆ คือ sources, filters และ destinations แล้ว ก็จะนำส่วนประกอบทั้งหมดมารวมไว้ใน log{}

ตัวอย่างที่ 9 ตัวอย่าง syslog-ng.conf
source s_loc { unix-stream("/dev/log"); internal(); };
source s_tcpmessages { tcp( ip(192.168.1.19); port(10514);); };

destination d_dailylog { file("/var/log/messages.$WEEKDAY"); };
destination d_untlog { file("/var/log/untlog" owner(unt)) perm(0600)); };

filter f_mail { facility(mail); };
filter f_messages { level(info .. warn) and not facility(auth, authpriv, cron, daemon, mail, news); };

log { source(s_tcpmessages); destination(d_untlog); };
log { source(s_loc); filter(f_mail); destination(d_untlog); };
log { source(s_loc); filter(f_messages); destination(d_dailylog); };


จาก log statement บรรทัดแรกนั้น จะทำให้ข้อมูลล็อกทุกอันที่มาจากเครื่อง 192.168.1.19 จะถูกบันทึกลงในไฟล์ /var/log/untlog
บรรทัดที่สองจะทำให้ข้อมูลล็อกของเมล์ (facility mail) ของ localhost ถูกบันทึกลงในไฟล์ /var/log/untlog
บรรทัดที่สามจะทำให้ข้อมูลล็อกของ localhost ที่ผ่านการกรองของ filter f_messages ถูกบันทึกลงในไฟล์ /var/log/messages.$WEEKDAY เช่น /var/log/Mon, /var/log/Sun

จากตัวอย่างที่ 9 อาจจะเกิดข้อสังสัยว่า ล็อกบางส่วนที่ไม่ได้ถูกจัดเก็บโดย log{} statement ทั้งสามตัวนั้นจะถูกจัดเก็บไว้ที่ใด syslog-ng มีค่า filter(DEFAULT) ซึ่งสามารถใช้ระบุในตอนท้ายเพื่อสั่งให้ syslog-ng บันทึกข้อมูลล็อกที่ไม่ได้ถูกจัดเก็บโดย log{} ก่อนหน้านี้ได้ ดังตัวอย่างที่ 10

ตัวอย่างที่ 10 ตัวอย่าง syslog-ng.conf
log { source(s_tcpmessages); destination(d_untlog); };
log { source(s_loc); filter(f_mail); destination(d_untlog); };
log { source(s_loc); filter(f_messages); destination(d_dailylog); };
log { source(s_loc); filter(DEFAULT); destination(d_dailylog); };


Advanced Configurations
ตัวอย่างที่ 11 แสดงการใช้ syslog-ng เพื่อคอยเฝ้าดูข้อมูลล็อกที่ต้องการ (log monitoring)
ตัวอย่างที่ 11
source s_local { unix_stream("/dev/log"); internal(); };
filter f_denials { match("[Dd]enied|[Ff]ail"); };
destination d_mail { program("/usr/local/sbin/mail.sh"); };
log { source(s_local); filter(f_denials); destination(d_mail); };


ตัวอย่างที่ 12 เป็นตัวอย่าง script ที่ใช้สำหรับส่งอี-เมล์

ตัวอย่างที่ 12
#!/usr/bash
while read line;
do
echo $line |mail -s "Weirdness on that Linux box" your_email@yourcompany.com
done


จุดที่น่าสนใจในตัวอย่างที่ 11 คือ match("[Dd]enied|[Ff]ail") ซึ่งหมายถึง ข้อมูลล็อกใดก็ตามที่มีคำว่า denied, Denied, Fail หรือ fail ปรากฏอยู่ ก็จะถูกส่งในรูปแบบอี-เมล์ไปยัง your_email@yourcompany.com โดย shell script ที่ชื่อ /usr/local/sbin/mail.sh

ข้อควรระวังในการใช้งานดังตัวอย่างที่ 11 คือ การใช้ program() นั้นเป็นการเรียกใช้งานโปรแกรมที่ระบุ โดยโปรแกรมนั้นจะยังคงรันอยู่จนกว่า syslog-ng จะหยุดการทำงานหรือเริ่มการทำงานใหม่ ดังนั้นผู้ดูแลระบบควรไตร่ตรองก่อนการใช้งานออปชันดังกล่าว เช่น หากรัน bash process ก็จะทำให้เกิดการสิ้นเปลืองงานทรัพยากร นอกจากนี้หากรันโปรแกรมในฐานะ root ก็จะเป็นการเพิ่มความเสี่ยงให้กับระบบอีกด้วย นอกจากนี้การใช้ระบบเตือนภัยผ่านทางอี-เมล์ดังตัวอย่างที่ 11 ยังก่อให้เกิดความเสี่ยงที่ทำให้ระบบถูกโจมตีแบบ Denial of Service ได้ เช่น ทำให้ mailbox ของผู้ดูแลระบบเต็ม


สรุป
syslog-ng เป็นโปรแกรมที่มีความหยืดหยุ่นในการทำงาน เหมาะสำหรับการนำมาใช้งานเป็นเป็น log server เป็นอย่างยิ่ง เพราะสามารถเก็บข้อมูลล็อกแยกตามเครื่องที่ส่งล็อกมาได้ นอกจากนี้ยังสามารถทำงานร่วมกับโปรแกรม sqlsyslogd เพื่อนำข้อมูลล็อกทั้งหมดบันทึกลงในฐานข้อมูลได้ ซึ่งจะนำเสนอรายละเอียดในโอกาสต่อไป

ผู้ดูแลระบบควรศึกษาคู่มือการใช้งานเพิ่มเติม เพื่อให้สามารถใช้ syslog-ng ได้อย่างเต็มประสิทธิภาพ โดยสามารถศึกษาได้จาก

ไดเรกทอรี doc ภายใต้ source ที่ขยายออกมาแล้วของ syslog-ng
หรือผ่านทางเมล์ลิงลิสต์ https://lists.balabit.hu/mailman/listinfo/syslog-ng
หรือตาม references ที่ให้ไว้ด้านล่างนี้
References
Balzs Scheidler (2000). syslog-ng reference manual. From http://www.balabit.com/products/syslog_ng/reference/book1.html
Syslog-ng FAQ. From http://www.campin.net/syslog-ng/faq.html
Michael D. Bauer. Building SECURE SERVERS with LINUX. 1st Edition, O'REILLY, 2002

VSFTP (Very Secure FTP)

บทนำ

ในองค์กรส่วนใหญ่มีการติดตั้งเซิร์ฟเวอร์ FTP ขึ้นมาเพื่อความสะดวกในการดำเนินการแลกเปลี่ยนไฟล์ ทำให้มีแนวโน้มของการมีจุดอ่อนทางด้านความปลอดภัยเพิ่มขึ้น เนื่องจากโปรแกรมที่ใช้เป็นเซิร์ฟเวอร์ FTP หลากหลายชนิด ไม่ว่าจะเป็น WU-FTP, ProFTP, หรือ BSD-FTP ล้วนมีช่องโหว่ที่ถูกค้นพบมากมาย จึงทำให้มีความเสี่ยงต่อการถูกผู้ไม่ประสงค์ดีโจมตีได้ อย่างไรก็ตาม มีอีกโปรแกรมหนึ่งชื่อ VSFTP ซึ่งมีออปชันด้านความปลอดภัยสำหรับเซิร์ฟเวอร์ FTP ที่เป็น Linux/UNIX ดังนั้น VSFTP จึงเป็นอีกทางเลือกหนึ่งสำหรับองค์กรที่จำเป็นต้องติดตั้งเซิร์ฟเวอร์ FTP และต้องการความปลอดภัยยิ่งขึ้น

VSFTP เป็นเซิร์ฟเวอร์ FTP ที่มีความมั่นคงและปลอดภัย ซึ่งสามารถลดความเสี่ยงที่ผู้โจมตีจะเข้าถึงเซิร์ฟเวอร์โดยผ่านทางช่องโหว่ของ FTP ได้ ตัวอย่างไซต์ FTP ต่างๆ ที่รัน VSFTP ได้แก่ Red Hat, OpenBSD, และ SuSE แม้กระทั่งสถาบัน SANS ก็แนะนำว่า VSFTP เป็นเดมอน FTP ที่ควรใช้เพราะมีความปลอดภัยสูง


--------------------------------------------------------------------------------
คุณสมบัติของ VSFTP
VSFTP เป็นเดมอน (daemon) ของเซิร์ฟเวอร์ FTP ที่รันบนระบบปฏิบัติการ Linux/UNIX ซึ่งมีคุณสมบัติหลักอยู่ 3 อย่าง ได้แก่

มีความปลอดภัย
มีประสิทธิภาพดี
มีความมั่นคง

นอกจากนี้โปรแกรม VSFTP ยังมีคุณสมบัติอื่นๆ อีก ได้แก่ เป็นระบบที่มีขนาดเล็ก มีความสามารถในการจัดการ virtual users มีทางเลือกในการทำงานเป็นแบบ stand-alone configuration และแบบผ่านทางเดมอน inetd รวมทั้งสามารถจำกัดปริมาณการรับส่งข้อมูล (bandwidth) ในการให้บริการในเซิร์ฟเวอร์ที่ต้องการควบคุมการใช้งานได้อีกด้วย

ในแง่ของความปลอดภัยนั้น VSFTP ได้ถูกออกแบบมาเพื่อแก้ไขจุดบกพร่องที่พบในการติดตั้ง wu-ftpd, proftpd, และแม้แต่ bsd-ftpd โดยการไม่ใช้บัญชีชื่อ root ซึ่งมีความเสี่ยง และใช้คุณสมบัติด้านความปลอดภัยที่มีประสิทธิภาพอย่าง chroot นอกจากนี้ยังมีการใช้เทคนิคการพัฒนาโปรแกรมอย่างปลอดภัยเพื่อแก้ปัญหาหน่วยความจำล้น (buffer overflows) ด้วย อ่านรายละเอียดเพิ่มเติมเกี่ยวกับความปลอดภัยของ VSFTP ได้ที่เอกสารเผยแพร่ ต่อไปนี้: Overview Design Implementation Trust และนอกจากนี้ยังมีการกล่าวถึง vsftpd ในแง่ของความปลอดภัยมากมาย ดังต่อไปนี้

ในเดือนพฤศจิกายน พ.ศ. 2545 ไซต์ ftp.openbsd.org ได้รัน vsftpd ซึ่งเป็นการยืนยันได้ว่า vsftpd มีคุณสมบัติดีเหมาะแก่การใช้เป็นเซิร์ฟเวอร์ FTP
vsftpd ไม่มีจุดบกพร่องชื่อ "globbing" ซึ่งมีผลกระทบต่อเซิร์ฟเวอร์ FTP หลายแห่ง สามารถศึกษาเหตุผลของการกำจัดจุดบกพร่องนี้ได้ในเอกสาร Bugtraq posting โดยมีคำอธิบายเหตุผล และหลักการออกแบบโปรแกรมด้วย
vsftpd ไม่มีจุดบกพร่องชื่อ "globbling" ที่เกี่ยวข้องกับการโจมตีแบบ denial of service ด้วยเหตุผลคล้ายๆ กัน ศึกษารายละเอียดได้ที่ Bugtraq posting
vsftpd ได้รับการสนับสนุนในหน้า Vanderbilt University ITS ภายใต้หัวข้อ "Safe Computing" ศึกษารายละเอียดได้ที่ http://www.vanderbilt.edu/its/security/safe_tools.html
vsftpd ได้รับการกล่าวถึงในหัวข้อความปลอดภัยว่า มีประสิทธิภาพดีและปราศจากช่องโหว่ด้านความปลอดภัย ซึ่งตรงกันข้ามกับเซิร์ฟเวอร์ FTP อื่นๆ รวมถึง OpenBSD ด้วย ศึกษารายละเอียดได้ที่ http://www.seifried.org/security/network/20010926-ftp-protocol.html
ในแง่ของประสิทธิภาพนั้น มีการกล่าวถึงดังนี้

ใน usenet มีการอ้างถึง vsftpd ว่าทำงานได้เร็วเทียบเท่ากับ BSD-ftpd (ซึ่งมีประสิทธิภาพสูง ต่างกับ wu-ftpd) ศึกษาเพิ่มเติมได้ที่ http://groups.google.com/groups?hl=en&selm=Pine.BSF.4.31.0202031625080.1082-100000%40atlantis.dp.ua
มีการเปรียบเทียบประสิทธิภาพของ vsftpd ว่ามีความเร็วถึง 70 Mbyte/sec ซึ่งมากกว่า TUX (55 Mbyte/sec)
มีการกล่าวว่าเครือข่ายของ Linux ที่อยู่บน gigabit ethernet ก็ใช้ vsftpd และมีความเร็วถึง 86 Mbyte/sec ศึกษาเพิ่มเติมได้ที่ http://lists.insecure.org/linux-kernel/2001/Feb/0104.html
ในการใช้ vsftpd บน RedHat นั้น Alan Cox กล่าวว่า "ในที่สุดก็มี ftpd ที่เหมาะสำหรับใช้บน Linux แล้ว" ศึกษาเพิ่มเติมได้ที่ http://www.linux.org.uk/diary/
เวอร์ชันล่าสุดของ VSFTP ขณะนี้คือเวอร์ชัน 1.2.0 สำหรับตัวอย่างที่จะกล่าวถึงในบทความนี้เป็นการใช้งาน VSFTP v.1.2.0 บนเซิร์ฟเวอร์ Red Hat 9.0 เคอร์เนลเวอร์ชัน 2.4.20-9


--------------------------------------------------------------------------------
การติดตั้ง
ทำการติดตั้ง VSFTP เช่นเดียวกับการติดตั้งแอพพลิเคชันอื่นๆ บน Linux โดยดาวน์โหลดได้จากเว็บไซต์ ftp://vsftpd.beasts.org/users/cevans/ มาเก็บไว้ในไดเรกทอรี /tmp
ทำการขยายไฟล์ด้วยคำสั่งต่อไปนี้
# cd /tmp
# gunzip -dc vsftpd-1.2.0.tar.gz

เข้าสู่ไดเรกทอรีที่ถูกสร้างขึ้นหลังจากขยายไฟล์แล้วซึ่งมีชื่อว่า vsftpd-1.2.0 และรันคำสั่ง make
# cd vsftpd-1.2.0
# make

หากต้องการแก้ไขการตั้งค่า สามารถแก้ไขที่ไฟล์ builddefs.h ก่อนที่จะคอมไพล์ด้วยคำสั่ง make เมื่อคอมไพล์เสร็จจะมีไฟล์ไบนารีชื่อ vsftpd ในไดเรกทอรีนี้

สร้างบัญชีชื่อ nobody ซึ่ง VSFTP ใช้เป็นส่วนหนึ่งของการตั้งค่าโดยดีฟอลต์ โดยปกติระบบปฏิบัติการ Linux/UNIX มีบัญชีชื่อนี้อยู่แล้วโดยดีฟอลต์ แต่ถ้าไม่มี ให้ทำการเพิ่มเข้าไปด้วยคำสั่ง

# /usr/sbin/useradd nobody

และกำหนด shell ในไฟล์ /etc/passwd สำหรับบัญชีชื่อ nobody ให้เป็น /sbin/nologin ด้วย เพื่อให้มีความปลอดภัยจากการล็อกอินเข้าใช้ shell ในการโจมตีระบบ ดังนี้

nobody:x:99:99:Nobody:/:/sbin/nologin

หากในเครื่องมีขื่อบัญชีนี้อยู่แล้วจะปรากฏผลดังนี้

useradd: user nobody exists


สร้างบัญชีชื่อ ftp (เฉพาะในกรณีที่ต้องการให้เครื่องเซิร์ฟเวอร์สนับสนุนการ ftp ด้วยการใช้ชื่อ anonymous) โดยต้องกำหนด shell ให้เป็น /sbin/nologin เช่นเดียวกับบัญชีชื่อ nobody ดังนี้

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

แต่ถ้าต้องการอนุญาตให้เฉพาะบัญชีผู้ใช้ในเครื่องสามารถ FTP ได้เท่านั้น ก็ไม่ต้องทำขั้นตอนนี้ อย่างไรก็ตามไดเรกทอรีบ้าน (home directory) ของบัญชีผู้ใช้ชื่อ anonymous จะต้องไม่มีเจ้าของเป็นบัญชีชื่อ ftp และผู้ใช้ไม่ควรมีสิทธิในการเขียนในไดเรกทอรีนี้ด้วย โดยกำหนดได้ด้วยคำสั่งต่อไปนี้

คำสั่ง วัตถุประสงค์
# mkdir /var/ftp เพื่อสร้างไดเรกทอรี /var/ftp
# /usr/sbin/useradd -d /var/ftp ftp เพื่อสร้างบัญชีชื่อ "ftp" พร้อมด้วยไดเรกทอรีบ้าน /var/ftp โดยปกติระบบส่วนใหญ่มีบัญชีผู้ใช้นี้อยู่แล้ว
# chown root.root /var/ftp เปลี่ยนเจ้าของไดเรกทอรี /var/ftp เป็นบัญชีชื่อ "root"
# chmod og-w /var/ftp จำกัดสิทธิของบัญชีผู้ใช้อื่น และบัญชีที่อยู่ในกลุ่มเดียวกันไม่ให้มีสิทธิในการเขียนลงไดเรกทอรีนี้


ติดตั้งไฟล์เอ็กซีคิวท์ ไฟล์ช่วยเหลือ (help pages) และอื่นๆ ซึ่งถูกสร้างไว้แล้ว โดยเข้าสู่ไดเรกทอรีที่สร้าง vsftpd ไว้และรันคำสั่ง make install

# cd /tmp/vsftpd-1.2.0
# make install


สำเนาไฟล์คอนฟิกูเรชันตัวอย่างไปไว้ในไดเรกทอรี /etc ด้วยคำสั่ง

# cp vsftpd.conf /etc


--------------------------------------------------------------------------------
การปรับแต่งค่าคอนฟิกูเรชัน
ไฟล์คอนฟิกูเรชันของ vsftpd ประกอบด้วย 3 ไฟล์ ดังนี้

ไฟล์ /etc/vsftpd.banned_emails -- เก็บรายการอี-เมล์ที่ใช้เป็นรหัสผ่านของผู้ใช้ชื่อ anonymous ซึ่งไม่ต้องการอนุญาตให้เชื่อมต่อเข้ามาใช้ ftp ได้
โดยระบุอี-เมล์แอดเดรสในไฟล์นี้บรรทัดละ 1 รายการเท่านั้น ดังตัวอย่างต่อไปนี้

mozilla@
siriwan@yahoo.com

สำหรับการตั้งค่าคอนฟิกูเรชันของไฟล์นี้มีความสัมพันธ์กับไฟล์ /etc/vsftpd.conf โดยจะต้องนำเครื่องหมาย # ออกจากบรรทัดที่เกี่ยวข้อง ตามที่แสดงไว้ดังต่อไปนี้

...
...
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
deny_email_enable=YES
# (default follows)
banned_email_file=/etc/vsftpd.banned_emails
...
...


ไฟล์ /etc/vsftpd.chroot_list -- เก็บรายชื่อผู้ใช้ในเครื่องที่จะถูกกำหนดให้ใช้งาน ftp ได้ในไดเรกทอรีที่กำหนดเท่านั้น โดยไม่สามารถเปลี่ยนไปเข้าสู่ไดเรกทอรีอื่นได้ (เรียกวิธีนี้ว่า chroot)
สำหรับการกำหนดการใช้งานลักษณะนี้ จะต้องแก้ไขไฟล์ที่เกี่ยวข้องดังนี้

- กำหนดรายชื่อที่ต้องการไว้ในไฟล์ /etc/vsftpd.chroot_list บรรทัดละ 1 รายชื่อ ดังนี้

user1
user2

- แก้ไขไฟล์ /etc/passwd โดยเพิ่ม /./ ในไดเรกทอรีบ้าน (home directory) ของบัญชีผู้ใช้ทั้ง 2 บัญชี ดังนี้

user1:x:500:500::/home/ftp-docs/./:/bin/ftponly
user2:x:501:500::/home/ftp-docs/./:/bin/ftponly

- แก้ไขไฟล์ /etc/vsftpd.conf โดยทำการนำเครื่องหมาย # ออกจากบรรทัดที่เกี่ยวข้อง ตามที่แสดงไว้ดังต่อไปนี้

...
...
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list
...
...


ไฟล์ /etc/vsftpd.conf -- เป็นไฟล์หลักที่ใช้กำหนดออปชันการตั้งค่าโดยทั่วไป
โดยปกติ VSFTP จะอ่านไฟล์คอนฟิกกูเรชัน /etc/vsftpd.conf เมื่อมันเริ่มทำงานเท่านั้น ดังนั้นจึงต้องทำการรีสตาร์ท xinetd ทุกครั้งที่มีการแก้ไขไฟล์นี้เพื่อให้การเปลี่ยนแปลงดังกล่าวมีผลต่อการทำงานของ VSFTP ทันที

ไฟล์นี้มีค่าดีฟอลต์จำนวนหนึ่งที่ควรทราบ ได้แก่

- โดยดีฟอลต์ VSFTP จะรันเป็นเซิร์ฟเวอร์ anonymous FTP ดังนั้นถ้าไม่ต้องการให้ผู้ใช้จากภายนอกล็อกอินเข้ามายังไดเรกทอรี FTP ที่เป็นดีฟอลต์ (/var/ftp) โดยใช้ชื่อว่า "anonymous" และรหัสผ่านเป็นอี-เมล์แอดเดรส ก็ให้ทำการปิดฟีเจอร์นี้โดยใส่เครื่องหมาย #ไว้ที่ต้นบรรทัด "anonymous_enable" และสามารถเปิดให้ผู้ใช้ภายในสามารถล็อกอินเข้ามาได้โดยนำเครื่องหมาย # ออกจากบรรทัด "local_enable" ดังนี้

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
#anonymous_enable=YES
#
# Uncomment this to allow local users to log in.
local_enable=YES

- โดยดีฟอลต์ VSFTP จะอนุญาตให้ผู้ใช้ที่ใช้ชื่อ anonymous สามารถดาวน์โหลดได้เท่านั้น ไม่สามารถอัพโหลดไฟล์มายังเซิร์ฟเวอร์ได้

# Uncomment this to enable any form of FTP write command.
#write_enable=YES
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#

- โดยดีฟอลต์ VSFTP ไม่อนุญาตให้ผู้ใช้ภายนอกสร้างไดเรกทอรีบนเครื่องเซิร์ฟเวอร์ FTP และมันจะเก็บบันทึกล็อกของการเข้าถึง FTP ไว้ที่ไฟล์ /var/log/vsftpd.log

# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/vsftpd.log


--------------------------------------------------------------------------------
ความปลอดภัยของ FTP

การควบคุมการเข้าถึงเครื่องให้บริการ FTP

ก่อนที่จะเริ่มเปิดให้บริการ FTP จะต้องทำการกำหนดสิทธิของการเชื่อมต่อเข้ามาใช้งานก่อน ซึ่งแบ่งวิธีการทำได้ดังนี้

กรณีรัน inetd

ทำการแก้ไขไฟล์ /etc/hosts.allow (TCP Wrapper) โดยเพิ่มบรรทัด "vsftpd:" และตามด้วยรายชื่อหมายเลข IP address ที่จะอนุญาตให้เข้ามาได้ ดังตัวอย่างต่อไปนี้

- เพื่ออนุญาตให้เชื่อมต่อเข้ามาจากตัวเครื่องเซิร์ฟเวอร์เอง ระบุในไฟล์ดังนี้ :

vsftpd: 127.0.0.1

- เพื่ออนุญาตให้เชื่อมต่อเข้ามาจากทุกคนในวง IP 192.168.1.0/24 ระบุในไฟล์ดังนี้ :

vsftpd: 192.168.1.

- เพื่ออนุญาตให้เชื่อมต่อเข้ามาจากเฉพาะ 2 IP address ระบุในไฟล์ดังนี้ :

vsftpd: 192.168.1.100 192.168.5.53

- เพื่ออนุญาตให้ทุกคนสามารถเชื่อมต่อเข้ามาได้ ระบุในไฟล์ดังนี้ :

vsftpd: ALL

กรณีรัน xinetd

สำหรับการรันด้วย xinetd นั้นได้รวมเอาคุณสมบัติควบคุมการเข้าถึงเครื่องให้บริการเหมือนกับ TCP Wrapper ไว้อยู่แล้ว ดังนั้น ทำได้โดยการแก้ไขไฟล์ /etc/xinetd.d/vsftpd โดยเพิ่มบรรทัด "only_from = " และตามต้วยรายชื่อหมายเลข IP address ที่จะอนุญาตให้เข้ามาได้ ดังตัวอย่างต่อไปนี้

- เพื่ออนุญาตให้เชื่อมต่อเข้ามาจากเฉพาะ 2 IP address ระบุในไฟล์ดังนี้ :

only_from = 192.168.1.100 192.168.5.53

และหากต้องการกำหนด IP address ที่ไม่อนุญาตให้เข้าถึง ก็ระบุในไฟล์ดังนี้ :

no_access = 192.168.4.22


การอัพโหลดโดยการ ftp แบบ anonymous

ถ้าต้องการให้ผู้ใช้จากภายนอกสามารถเขียนข้อมูลลงบนเครื่องเซิร์ฟเวอร์ FTP ได้ ควรจะสร้างไดเรกทอรีที่อนุญาตให้เขียนได้อย่างเดียวภายใต้ไดเรกทอรี /var/ftp/pub การทำเช่นนี้จะเป็นการอนุญาตให้ผู้ใช้ทำการอัพโหลดได้แต่ไม่สามารถเข้าถึงไฟล์อื่นที่อัพโหลดโดยผู้ใช้คนอื่น ซึ่งทำได้ดังนี้

# mkdir /var/ftp/pub/upload
# chmod 733 /var/ftp/pub/upload

หมายเหตุ : ต้องทำการแก้ไขที่ไฟล์ /etc/vsftpd.conf ให้อนุญาตการเขียนไฟล์ลงบนเซิร์ฟเวอร์ด้วย ดังนี้

# Uncomment this to enable any form of FTP write command.
write_enable=YES
...
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
anon_upload_enable=YES


การแก้ไขแบนเนอร์ของ FTP

การเปลี่ยนแปลงแบนเนอร์สำหรับเป็นข้อความต้อนรับเมื่อผู้ใช้ล็อกอินเข้ามาใช้งาน ftp นั้น สามารถแก้ไขได้ในไฟล์ /etc/vsftpd.conf เพื่อไม่ให้ผู้ไม่ประสงค์ดีรู้ว่าระบบที่ใช้เป็นประเภทใด ดังนี้

# You may fully customise the login banner string:
ftpd_banner= New Banner Here

(ในที่นี้ใช้ประโยค "Welcome to My FTP service, authorized access only" ดังปรากฎในหัวข้อ "ตัวอย่างการล็อกอินเพื่อทดสอบการ FTP")


การใช้ SCP แทน FTP

ข้อเสียอย่างหนึ่งของ FTP คือ ไม่มีการเข้ารหัสชื่อผู้ใช้และรหัสผ่านสำหรับล็อกอิน ทำให้มีจุดอ่อนต่อการโจมตีโดยผู้อื่นที่จะสามารถดักขโมยชื่อผู้ใช้และรหัสผ่านไปได้จากการเชื่อมต่อเครือข่าย ดังนั้นขอแนะนำให้ทำการแลกเปลี่ยนไฟล์ด้วยวิธี Secure Copy (SCP) ซึ่งมีการเข้ารหัสแทนการใช้ FTP แต่ทั้งนี้ SCP ไม่สนับสนุนบริการ ftp ด้วยการใช้ชื่อ anonymous

--------------------------------------------------------------------------------

วิธีเริ่มต้นการทำงานของ VSFTP

VSFTP สามารถรันได้ 2 โหมด ได้แก่

โหมด stand-alone
โหมด inetd/xinetd

การรันผ่านเดมอน inetd หรือ xinetd สามารถควบคุมการทำงานของโปรแกรมได้ง่ายกว่า และเป็นวิธีที่ควรใช้มากกว่าแบบ stand-alone สิ่งสำคัญที่ต้องคำนึงถึงคือ ในการตั้งค่าของ VSFTP นั้น มันจะรับการเชื่อมต่อแบบ anonymous เท่านั้น (สมมติว่าได้สร้างบัญชีชื่อ "ftp" ไปก่อนหน้านี้แล้ว) ดังนั้นถ้าต้องการอนุญาตให้บัญขีผู้ใช้ในเครื่องสามารถเชื่อมต่อเข้ามาใช้งาน ftp ได้ จะต้องทำการตั้งค่า Pluggable Authentication Modules (PAM) ซึ่งจะกล่าวถึงต่อไปด้วย

การทำงานแบบ stand-alone
สิ่งที่ต้องทำสำหรับการรัน VSFTP ในโหมด stand-alone ได้แก่
- เพิ่มประโยค "listen = YES"ไว้ในบรรทัดสุดท้ายของไฟล์ /etc/vsftpd.conf
- รันคำสั่ง # /usr/local/sbin/vsftpd &


การใช้ xinetd
เนื่องจากในที่นี้ได้ทำการทดสอบและใช้งานบนระบบ Red Hat 9 (ซึ่งใช้ xinetd) ดังนั้นจะเน้นที่การดำเนินการติดตั้งในโหมด xinetd
กรณีรัน inetd
- เพิ่มบรรทัดต่อไปนี้ในไฟล์ /etc/inetd.d
ftp stream tcp nowait root /usr/local/sbin/vsftpd

- รีสตาร์ทเดมอน inetd ด้วยคำสั่ง
# kill -SIGHUP


กรณีรัน xinetd
- ไฟล์คอนฟิกกูเรชันสำหรับการเริ่มต้นทำงานของ VSFTP ในเครื่องที่รัน xinetd นั้น อยู่ภายใต้ไดเรกทอรี /etc/xinetd.d โดยมีชื่อว่า vsftpd หากไม่พบไฟล์ดังกล่าว ให้ทำการสำเนาจากตัวอย่างของ vsftpd ที่มากับ VSFTP distribution (/tmp/vsftpd-1.2.0/xinetd.d/vsftpd) มาไว้ในไดเรกทอรีนี้ ในไฟล์ vsftpd นี้ มีพารามิเตอร์จำนวนหนึ่งภายใต้ "service ftp" ซึ่งระบุให้ทราบวิธีการทำงานของเซิร์ฟเวอร์ VSFTP ดังต่อไปนี้

พารามิเตอร์ ค่าที่กำหนด ความหมาย
socket_type stream เป็นชนิดของ TCP socket ที่ใช้สำหรับโพรโตคอลนี้ นั่นคือ FTP เป็น TCP stream
wait no เกี่ยวกับความสามารถสำหรับ socket ที่จะรับข้อความ
user root ผู้ใช้ที่จะเป็นผู้เปิดให้บริการ ftp คือใคร (ในที่นี้คือ root) หมายเหตุ : VSFTP จะลดสิทธิลงทันทีที่เริ่มทำงาน
server /usr/local/sbin/vsftpd เป็นตำแหน่งของโปรแกรมเซิร์ฟเวอร์ที่เกี่ยวข้องกับไฟล์คอนฟิกกูเรชันนี้ ถ้ามีการตั้ง vsftpd ในไดเรกทอรีที่แตกต่างออกไปก็ต้องแก้ไขเปลี่ยนแปลงค่านี้
nice 10 ออปชันนี้ใช้แก้ไขลำดับตารางเวลาดีฟอลต์สำหรับโพรเซส โดย 10 คือค่าดีฟอลต์ ส่วนค่าสูงสุดคือ 20
disable no เซอร์วิสนี้ไม่ถูกปิด หรืออีกนัยหนึ่งคือ มันควรเริ่มทำงานทันที เมื่อ xinetd เริ่มต้นทำงาน
per_source 5 เป็นการระบุจำนวนของการเชื่อมต่อเข้ามาใช้งานในเวลาเดียวกันจากหมายเลข IP เดียวกัน โดยเพื่อความปลอดภัย ควรตั้งค่าไว้เป็น 5
instances 200 กำหนดจำนวนสูงสุดของการเชื่อมต่อ FTP ไปยังเซิร์ฟเวอร์ในเวลาเดียวกัน ซึ่งมีประโยชน์ต่อการกำหนดโหลดการทำงานของเซิร์ฟเวอร์ โดยเพื่อความปลอดภัยควรตั้งค่าไว้เป็น 200
no_access No default เป็นการระบุรายการ IP address ที่ไม่อนุญาตให้เข้าถึงเซอร์วิสนี้ เช่น 192.168.1.4

- เมื่อปรับแก้ไฟล์ /etc/xinetd.d/vsftpd เรียบร้อยแล้วให้ทำการรีสตาร์ท xinetd ด้วยคำสั่ง


# /etc/init.d/xinetd restart

หรือ

# service xinetd restart

- และเพื่อให้ xinetd เริ่มทำงานทุกครั้งที่เครื่องรีสตาร์ท ให้ใช้คำสั่งต่อไปนี้


# chkconfig --add xinetd
# chkconfig --level 345 xinetd on


หมายเหตุ : ถ้าก่อนหน้านี้ตั้งเป็นโหมด stand-alone ต้องทำการลบบรรทัด "listen =YES" จากไฟล์ /etc/vsftpd.conf ออกด้วย มิฉะนั้นเซอร์วิส vsftpd จะไม่ทำงาน เมื่อ xinetd รีสตาร์ท

หลังจากเสร็จสิ้นกระบวนการแล้ว ไม่ว่าจะเป็นการรันในโหมดใดก็ตาม สามารถตรวจสอบดูให้แน่ใจว่า VSFTP เริ่มทำงานจริงได้โดยใช้คำสั่ง netstat -a และจะต้องได้ผลดังต่อไปนี้ :

# netstat -a | grep ftp
tcp 0 0 *:ftp *:* LISTEN

หมายเหตุ : ในส่วนของผลลัพธ์ที่ได้อาจแสดงเป็น ftp หรือหมายเลขพอร์ต 21


--------------------------------------------------------------------------------
การตั้งค่า Pluggable Authentication Modules (PAM)
การติดตั้งเซิร์ฟเวอร์ FTP เพื่อแจกจ่ายซอฟต์แวร์ให้ผู้ใช้ใดๆ เชื่อมต่อเข้ามานั้น มีประโยชน์มาก แต่บางครั้งอาจต้องทำการควบคุมการเข้าถึงทรัพยากรบางอย่าง เช่น ต้องการให้เพียงลูกค้าเท่านั้นสามารถใช้งาน FTP ได้

ดังนั้นการทำเช่นนี้กับ VSFTP ทำได้โดยใช้ PAM ในการพิสูจน์ตัวตน ซึ่งคล้ายกับเครื่อง Red Hat ส่วนใหญ่ ซึ่งไฟล์ที่เกี่ยวข้องชื่อ pam.conf หรือไดเรกทอรีชื่อ pam.d สำหรับ VSFTP นั้นมีการตั้งค่า PAM ตัวอย่างไว้แล้ว อยู่ในไดเรกทอรีย่อยชื่อ RedHat ของโปรแกรมที่ขยายออกมาในตอนแรกก่อนการติดตั้ง (/tmp/vsftpd-1.2.0/RedHat/vsftpd.pam) ให้ทำการเปลี่ยนชื่อและทำสำเนาไปไว้ในไดเรกทอรี pam.d ซึ่งสามารถทำได้ดังนี้

#cp vsftpd.pam /etc/pam.d/ftp

จากนั้นทำการกำหนดเพื่ออนุญาตให้ผู้ใช้ภายในสามารถล็อกอินได้ โดยแก้ไขที่ไฟล์ /etc/vsftpd.conf และเอาเครื่องหมาย # ออกจากบรรทัด "local_enable=YES" เมื่อผู้ใช้เชื่อมต่อเข้ามาก็จะเข้าสู่ไดเรกทอรีบ้าน (home directory) ของผู้ใช้คนนั้นทันที


--------------------------------------------------------------------------------
ตัวอย่างการตั้งค่าในไฟล์ /etc/vsftpd.conf เพื่ออนุญาตให้ผู้ใช้สามารถเข้าถึงไดเรกทอรีที่แชร์ไว้ในลักษณะอ่านได้อย่างเดียว

ในตัวอย่างนี้ ไม่อนุญาตให้ผู้ใช้ใช้ชื่อ anonymous แต่อนุญาตให้เฉพาะผู้ใช้ภายในที่ต้องการดาวน์โหลดไฟล์จากไดเรกทอรีที่แชร์ไว้เท่านั้นสามารถ ftp ได้ ขั้นตอนการทำมีดังนี้ :

ปิดการล็อกอินด้วยผู้ใช้ชื่อ anonymousโดยใส่เครื่องหมาย # ไว้ที่ต้นบรรทัด "anonymous_enable" ในไฟล์ /etc/vsftpd.conf ดังนี้

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
#anonymous_enable=YES


เปิดให้ผู้ใช้ภายในแต่ละคนล็อกอินได้ โดยนำเครื่องหมาย # ออกจากต้นบรรทัด "local_enable" ในไฟล์ /etc/vsftpd.conf ดังนี้
# Uncomment this to allow local users to log in.
local_enable=YES


สร้างกลุ่มผู้ใช้ (user group) และ ไดเรกทอรีที่แชร์ไว้ สำหรับกรณีนี้จะสร้าง "/home/ftp-docs" เป็นไดเรกทอรีที่แชร์ไว้และกลุ่มผู้ใช้เป็น "ftp-users" สำหรับผู้ใช้ที่จะล็อกอินเข้ามาดาวน์โหลด

# groupadd ftp-users
# mkdir /home/ftp-docs


สร้างไดเรกทอรีที่เข้าถึงได้จากผู้ใช้ในกลุ่ม ftp-users

# chmod 750 /home/ftp-docs
# chown root:ftp-users /home/ftp-docs


สร้างบัญชีชื่อผู้ใช้ และไดเรกทอรีดีฟอลต์ชื่อ /home/ftp-docs

# useradd -g ftp-users -d /home/ftp-docs user1
# useradd -g ftp-users -d /home/ftp-docs user2
# passwd user1
# passwd user2


ทำสำเนาไฟล์สำหรับดาวน์โหลดไปไว้ที่ไดเรกทอรี /home/ftp-docs
เปลี่ยนสิทธิการเข้าถึงไฟล์ภายใต้ไดเรกทอรี /home/ftp-docs ให้สามารถอ่านได้อย่างเดียวโดยผู้ใช้ในกลุ่ม ftp-users

# chown root:ftp-users /home/ftp-docs/*
# chmod 740 /home/ftp-docs/*

เมื่อถึงขั้นตอนนี้แล้ว ผู้ใช้จะสามารถล็อกอินผ่าน ftp ไปยังเซิร์ฟเวอร์โดยใช้ชื่อและรหัสผ่านใหม่นี้ได้ ถ้าไม่ต้องการให้ผู้ใช้เขียนหรืออัพโหลดไฟล์ในไดเรกทอรีใดๆ ให้ใส่เครื่องหมาย # ที่ต้นบรรทัด "write_enable" ในไฟล์ /etc/vsftpd.conf ดังนี้

# Uncomment this to enable any form of FTP write command.
#write_enable=YES


รีสตาร์ท vsftp เพื่อให้การแก้ไขไฟล์ /etc/vsftpd.conf มีผลต่อการทำงานทันที ดังนี้

# /etc/init.d/xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
#


สำหรับรายละเอียดของการตั้งค่าสำหรับออปชันอื่นๆ ในไฟล์ /etc/vsftpd.conf นี้ สามารถศึกษาเพิ่มเติมได้จากไฟล์ vsftpd.conf.5 (ในที่นี้อยู่ในไดเรกทอรี /usr/share/man/man5 )


--------------------------------------------------------------------------------

ตัวอย่างการล็อกอินเพื่อทดสอบการ FTP



เชื่อมต่อมาที่เซิร์ฟเวอร์โดยผ่านทาง FTP

c:\>ftp 192.168.9.124
Connected to 192.168.9.124.
220 Welcome to My FTP service, authorized access only.
User (192.168.9.124:(none)): user1
331 Please specify the password.
Password:
230 Login successful.
ftp>


ผู้ใช้จะไม่สามารถอัพโหลดไฟล์ "file_4_upload" ได้ ตามที่ได้ตั้งค่าไว้ ดังนี้

ftp> put file_4_upload
200 PORT command successful. Consider using PASV.
550 Permission denied.
ftp>


ตรวจสอบไฟล์ที่ต้องการดาวน์โหลดว่ามีอยู่จริงหรือไม่

ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
file_4_download
226 Directory send OK.
ftp: 10 bytes received in 0.00Seconds 10000.00Kbytes/sec.
ftp>

และทำการดาวน์โหลดไฟล์ที่ต้องการ ดังนี้

ftp> get file_4_download
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for file_4_download (8294 bytes).
####
226 File send OK.
ftp: 8294 bytes received in 0.01Seconds 829.40Kbytes/sec.
ftp>


เมื่อทดสอบเชื่อมต่อด้วยการ ftp โดยใช้ชื่อ anonymous จะไม่สามารถทำได้เนื่องจากได้จำกัดไว้ตั้งแต่ต้นแล้ว

C:\>ftp 192.168.9.124
Connected to 192.168.97.124.
220 Welcome to My FTP service, authorized access only.
User (192.168.9.124:(none)): anonymous
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp> bye
221 Goodbye

--------------------------------------------------------------------------------

บทสรุป

VSFTP ถูกเลือกใช้โดยไซต์ใหญ่ๆ หลายไซต์ รวมถึงโครงการ Open BSD ที่เน้นทางด้านความปลอดภัย หรือแม้แต่ Red Hat Linux เนื่องมาจากคุณสมบัติของมันที่มีขนาดเล็ก สามารถรับโหลดที่หนักได้ รวมถึงมีความปลอดภัยและใช้งานได้ง่ายด้วย จึงทำให้ VSFTP เหมาะที่จะนำมาใช้เป็นเซิร์ฟเวอร์ FTP ที่มีปัญหาด้านความปลอดภัยน้อยมาก


--------------------------------------------------------------------------------

แหล่งข้อมูลอ้างอิง

http://techupdate.zdnet.co.uk/story/0,,t507-s2129119-p1,00.html
http://techupdate.zdnet.co.uk/story/0,,t507-s2129119-p2,00.html
http://vsftpd.beasts.org/
http://www.siliconvalleyccie.com/linux-hn/ftp-server.htm

Linux Security Checklist

กล่าวนำ

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

ณ ที่เวลานี้ผู้เขียนได้รวบรวมไว้ได้เป็นจำนวนทั้งสิ้น 31 หัวข้อ ซึ่งในอนาคตจะได้ทำการปรับปรุง checklist นี้อย่างสม่ำเสมอเพื่อความครบถ้วนและทันสมัยยิ่งขึ้น รวมทั้งจะได้เป็นประโยชน์ต่อผู้ดูแลระบบต่อไป

บทความนี้จะใช้วิธีการตั้งคำถามและตอบ คำถามจะเป็นไปในลักษณะ "ได้ดำเนินการแล้วหรือไม่" ถ้ายังไม่ได้ดำเนินการหรือดำเนินการไปบ้างบางส่วน ให้ดูในส่วนของคำตอบซึ่งจะเสนอวิธีการที่ควรจะปฏิบัติเพื่อสร้างความปลอดภัยให้กับระบบ



--------------------------------------------------------------------------------

1. ก่อนทำการติดตั้งระบบปฏิบัติการ ได้ทำการถอดสาย LAN ออกหรือไม่

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

2. การติดตั้งได้เลือกเฉพาะแพ็กเกจเท่าที่จำเป็นต้องใช้งานหรือไม่

คำตอบ : ให้เลือกติดตั้งแพ็กเกจเฉพาะเท่าที่จำเป็นเนื่องจากการติดตั้งแพ็กเกจอื่นๆ ที่ไม่จำเป็น ได้แก่ โปรแกรมและไลบรารี่ของระบบ X windows โปรแกรมคอมไพเลอร์ที่ไม่มีความจำเป็นต้องใช้ แพ็กเก็จสำหรับบางเซิร์ฟเวอร์ที่ไม่มีความจำเป็น อาจจะทำให้เกิดเป็นช่องโหว่เกิดขึ้นได้ในระบบได้

3. การติดตั้งได้พิจารณาแบ่งพาร์ทิชันให้เหมาะสมต่อการใช้งานหรือไม่

คำตอบ : ให้ทำการแบ่งพาร์ทิชันให้เหมาะสมต่อการใช้งาน ดูรายระเอียดเพิ่มเติมในหัวข้อ Define Partitions จากเว็บ http://thaicert.nectec.or.th/paper/unix_linux/Linux_Installation.php การไม่แบ่งพาร์ทิชันเลยหรือมีเพียงพาร์ทิชันเดียวอาจทำให้พาร์ทิชันนั้นเต็มได้ เช่น โดยการที่ผู้บุกรุกทำการส่งอี-เมล์เข้ามาเป็นจำนวนมากจนทำให้พาร์ทิชันนั้นเต็ม ซึ่งส่งผลให้ระบบไม่สามารถให้บริการได้

4. มีวิธีการเพื่อตรวจสอบรหัสผ่านของ root และผู้ใช้อื่นๆ ในระบบเพื่อให้ยากต่อการเดาหรือไม่ รวมทั้งได้กำหนดให้มีการเปลี่ยนรหัสผ่านอย่างสม่ำเสมอหรือไม่

คำตอบ : ต้องตั้งรหัสผ่านให้ยากต่อการเดา เช่น มีความยาวอย่างน้อย 6 ตัวอักษร ไม่ใช้คำที่มาจากพจนานุกรม ใช้ตัวอักษรที่หลากหลายทั้งตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก ตัวเลข และสัญลักษณ์ต่างๆ ไม่ใช้ชื่อเฉพาะ ชื่อเพื่อน หรือชื่อสัตว์เลี้ยง รวมทั้งควรเปลี่ยนรหัสผ่านทุกๆ 3 เดือน

5. ได้มีการจัดเตรียมดิสก์เก็ตไว้สำหรับทำการบูตระบบหรือไม่

คำตอบ : เมื่อระบบเกิดปัญหาไม่สามารถบูตได้ จะได้ใช้แผ่นดิสก์เก็ตเพื่อทำการบูตระบบได้

6. ได้มีการใช้รหัสผ่านเพื่อป้องกันบูตโหลดเดอร์หรือไม่

คำตอบ : บูตโหลดเดอร์เป็นโปรแกรมที่ใช้สำหรับทำการบูตเครื่อง ควรทำการตั้งรหัสผ่านเพื่อให้เมื่อเริ่มทำการบูตขึ้นมาจะต้องมีการใส่รหัสผ่านให้ถูกต้องก่อนที่จะดำเนินการบูตต่อไป
ให้ดูการกำหนดรหัสผ่านในหัวข้อ Password protect LILO boots จากเว็บ http://thaicert.nectec.or.th/paper/unix_linux/Linux_Installation.php ให้สังเกตที่บรรทัด password และ restricted หรือ grub ดังนี้

#grub
grub>md5crypt
password ****
$1$ntbLIO$ZlzWu30CZCud0/ydxMQwt1
จากนั้นไปที่ไฟล์ /etc/grub.conf แล้วเพิ่ม
Password --md5 $1$ntbLIO$ZlzWu30CZCud0/ydxMQwt1

7. ได้ทำการตรวจสอบ default user เช่น bin lp mail uucp เป็นต้น หรือเป็น user ที่เกิดจากการติดตั้งเซิร์ฟเวอร์ เช่น www เป็นต้น ให้ไม่สามารถล็อกอินเข้าสู่ระบบแล้วหรือไม่

คำตอบ : ให้ตรวจสอบ default user ต่างๆ ให้ไม่สามารถล็อกอินเข้าสู่ระบบได้ วิธีการคือ
ในไฟล์ /etc/passwd แก้ไขฟิลด์สุดท้ายของ user ที่ต้องการให้เป็น /bin/nologin เช่น


bin:x:1:1:bin:/bin:/sbin/nologin

8. ได้ทำการลบ guest user หรือ user ที่สร้างขึ้นมาเพื่อใช้งานชั่วคราว ซึ่งไม่มีความจำเป็นต้องใช้งานอีกต่อไปแล้วหรือไม่

คำตอบ : ให้ตรวจสอบและลบ user ดังกล่าวจากไฟล์ /etc/passwd ทิ้งไป

9. ได้ทำการตรวจสอบว่าไม่มี user คนใดในระบบที่มี UID เท่ากับ 0 แล้วหรือไม่

คำตอบ : user ที่มี UID เท่ากับ 0 ต้องเป็น root เท่านั้น ให้ใช้คำสั่งดังนี้

#cat /etc/passwd | awk -F: '$3==0 {print $1}'
เพื่อตรวจสอบว่ามี user คนใดในไฟล์ /etc/passwd ที่มี UID เท่ากับ 0 (ยกเว้น root)

10. ได้กำหนดค่าของ umask ไว้อย่างเหมาะสมแล้วหรือไม่

คำตอบ : umask ใช้สำหรับกำหนดเลขฐานแปด เช่น โดยปกติ จะมีค่า 0022 เมื่อนำค่านี้ไป xor กับไฟล์ที่สร้างขึ้นมาใหม่จะได้เป็นสิทธิในการเข้าถึงไฟล์ดังกล่าว ให้กำหนดค่า umask ให้เหมาะสม เช่น ไฟล์โดยปกติเมื่อแรกสร้างขึ้นมาจะมีสิทธิการใช้งานเป็น 0666 หรือ -rw-rw-rw- และเมื่อนำไป xor กับ umask ที่มีค่า 0022 จะได้สิทธิการใช้งานเป็น 0644 หรือ -rw-r--r- ซึ่งหมายถึงว่าเฉพาะเจ้าของเท่านั้นที่สามารถเขียนและอ่านไฟล์นี้ได้ ส่วนผู้อื่นจะสามารถอ่านได้อย่างเดียว หากกำหนดค่า umask ไว้อย่างไม่เหมาะสม ไฟล์ที่สร้างขึ้นมาอาจจะมีสิทธิการใช้งานที่ไม่เหมาะสมได้

11. ได้ทำการอัพเดตโปรแกรมอุดช่องโหว่ (patch) เพื่อปิดช่องโหว่ของระบบอย่างสม่ำเสมอหรือไม่

คำตอบ : ให้ทำการอัพเดตโปรแกรมอุดช่องโหว่อย่างสม่ำเสมอเพื่อปิดช่องโหว่ใหม่ๆ ของระบบ เช่น ในกรณีของลินุกซ์ Red Hat ให้รันโปรแกรม up2date เพื่อตรวจสอบ ดาวน์โหลด และติดตั้งโปรแกรมอุดช่องโหว่ที่จำเป็น ให้ดูรายละเอียดการใช้งานโปรแกรมนี้ที่ http://thaicert.nectec.or.th/paper/unix_linux/up2date.php

12. ได้ทำการค้นหาโปรแกรมหรือไฟล์ที่มี SUID และ SGID อย่างสม่ำเสมอหรือไม่

คำตอบ : โปรแกรมที่มี SUID หรือ SGID หมายถึงโปรแกรมที่เมื่อทำงานสามารถใช้สิทธิของ root เพื่อดำเนินการต่างๆ ได้ ตัวอย่างเช่น โปรแกรม passwd ซึ่งผู้ใช้สามารถใช้เพื่อทำการแก้ไขรหัสผ่านในไฟล์ /etc/passwd และ /etc/shadow (ไฟล์ทั้งสองนี้ สิทธิการเขียนข้อมูลเป็นของ root เท่านั้น ผู้ใช้ทั่วไปไม่สามารถเขียนข้อมูลลงไปที่ไฟล์นี้ได้) โปรแกรมประเภทนี้จึงมีความเสี่ยงต่อการใช้งาน จึงควรที่จะจำกัดทางด้านจำนวนให้ไม่เพิ่มขึ้นหรือเพิ่มเป็นจำนวนน้อยที่สุด ถ้าจำเป็นต้องพัฒนาโปรแกรมเหล่านี้ขึ้นมา ต้องไม่เขียนเป็นเชลล์สคริปต์ และให้ทำการตรวจสอบตัวโปรแกรมโดยละเอียดก่อนที่จะนำไปสู่การใช้งานจริงโดยผู้ใช้
วิธีการค้นหาโปรแกรมเหล่านี้ทำได้โดยใช้คำสั่ง

#find / \( -perm -4000 -o -perm -2000 \) -print

13. ได้ทำการตรวจสอบหรือมีกลไกในการตรวจสอบว่ามีผู้ใช้บางคนที่ไม่ได้กำหนดรหัสผ่านของตนหรือไม่

คำตอบ : ผู้ใช้ที่ไม่ได้กำหนดรหัสผ่านมีความเสี่ยงต่อความปลอดภัยสูงเนื่องจากผู้ไม่ประสงค์ดีอาจจะทำการสแกนดูระบบและพบช่องโหว่ดังกล่าว ซึ่งสามารถใช้เป็นช่องทางในการบุกรุกระบบได้ ให้ทำการตรวจสอบผู้ใช้ที่ไม่ได้รหัสผ่านโดยใช้คำสั่งดังนี้

#cat /etc/shadow | awk -F: 'length($2)<1 {print $1}'

14. ได้มีการใช้บริการ syslog ตรวจสอบการปรับแต่งค่าของ syslog รวมทั้งได้ตรวจสอบข้อมูลล็อกของ syslog อย่างสม่ำเสมอหรือไม่

คำตอบ : บริการ syslog เป็นบริการสำคัญที่ใช้บันทึกข้อมูลล็อกซึ่งเป็นสิ่งที่ช่วยบอกได้ว่ามีใครมาทำอะไรกับระบบของเราบ้าง ให้ทำการปรับแต่งค่าพารามิเตอร์ของ syslog ให้เหมาะสมก่อนการใช้งาน ให้ดูการปรับแต่งได้ที่เว็บ http://thaicert.nectec.or.th/paper/unix_linux/linux_syslog.php
สำหรับผู้ดูแลระบบที่สนใจการบันทึกล็อกที่มีขีดความสามารถสูงขึ้น ให้ศึกษา syslog-ng (syslog new generation) ได้จาก http://thaicert.nectec.or.th/paper/unix_linux/syslog-ng.php
รวมทั้งยังมีโปรแกรมเสริมเพื่อช่วยในการบริหารและจัดการข้อมูลล็อก ได้แก่
โปรแกรม swatch ให้ดูรายละเอียดการใช้งานที่ http://thaicert.nectec.or.th/paper/unix_linux/swatch.php

15. ได้ตรวจสอบและปิดการใช้งานบริการเครือข่ายที่ไม่มีความจำเป็นต้องใช้งานหรือไม่ รวมทั้งต้องตรวจสอบอย่างสม่ำเสมอด้วย

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


#netstat -tuan

สำหรับวิธีการปิดบริการเครือข่าย เช่น บนลินุกซ์ Red Hat ให้ดูข้อมูลได้จาก http://thaicert.nectec.or.th/paper/unix_linux/disable_system_services.php

16. ได้จัดทำแบนเนอร์ภายหลังการล็อกอินเพื่อแจ้งเตือนนโยบายการใช้งานระบบ หรือไม่

คำตอบ : แบนเนอร์คือข้อความที่แสดงขึ้นมาภายหลังจากที่ผู้ใช้ได้ทำการล็อกอินสำเร็จแล้ว
ให้จัดทำแบนเนอร์เพื่อแจ้งเตือนให้ผู้ใช้ทราบถึงนโยบายการใช้งานระบบ แบนเนอร์สามารถกำหนดไว้ในไฟล์ /etc/motd ตัวอย่างของแบนเนอร์ ได้แก่
"ระบบที่ใช้งานนี้เป็นระบบที่อนุญาตให้ใช้งานได้เฉพาะผู้ที่มีสิทธิเท่านั้น ห้ามไม่ให้ผู้ไม่มีสิทธิใช้งานระบบนี้อย่างเด็ดขาด การใช้งานระบบนี้จะอยู่ภายใต้เงื่อนไขที่ว่ากิจกรรมการใช้งานทั้งหมดจะได้รับการเฝ้าดูอย่างต่อเนื่อง การใช้งานโดยที่ผู้ใช้ไม่มีสิทธิหรือใช้ผิดวัตถุประสงค์อาจจะถูกฟ้องร้องหรือดำเนินการทางกฎหมาย"
แบนเนอร์ในลักษณะนี้ เมื่อผู้บุกรุกได้เห็น อาจเกิดความรู้สึกเกรงกลัวและออกจากระบบไปโดยที่ไม่ทำให้ระบบได้รับความเสียหาย

17. เมื่อทำการติดตั้งโปรแกรมหรือแพ็กเก็จใหม่ ได้ทำการตรวจสอบว่าเป็นโปรแกรมที่เป็นของแท้ก่อนหรือไม่


คำตอบ : การไม่ตรวจสอบโปรแกรมก่อนอาจเป็นผลให้ได้รับโปรแกรมที่ไม่ใช่เป็นของแท้และอาจแฝงมาด้วยม้าโทรจัน ซึ่งอาจส่งผลข้างเคียงอื่นๆ ได้ การตรวจสอบมีวิธีการที่ทำได้หลายวิธี เช่น ใช้การตรวจสอบผลรวมด้วย md5sum หรือ gpg เพื่อทำการตรวจสอบว่าไฟล์ที่ได้รับของเราตรงกับที่ผู้ผลิตหรือพัฒนาโปรแกรมได้ประกาศไว้หรือไม่ ตัวอย่างเช่น ในเว็บไซต์ของผู้ผลิตโปรแกรม อาจให้ข้อมูลไว้ว่าเมื่อทำการตรวจสอบโปรแกรม xxx.tar.gz ด้วย md5sum จะได้ผลลัพธ์ดังนี้

#md5sum xxx.tar.gz
466c63bb71b710d20a5c353df8c1a19c
หรือตรวจสอบด้วย gpg
#gpg--import KEYS
#gpg --verify xxx.tar.gz.asc
จะมีข้อความบอกให้สังเกตบรรทัดที่มีคำว่า
gpg: Good signature from "Pong Asa " {แสดงว่าไฟล์สมบูรณ์}
หรือ
gpg: BAD signature from "Pong Asa " {แสดงว่าไฟล์ไม่สมบูรณ์}
ดังนั้นผู้ดูแลระบบควรจะได้ตรวจสอบว่าโปรแกรม xxx.tar.gz ที่ตนได้รับเมื่อรันผ่าน md5sum ต้องได้ค่าที่เป็นผลลัพธ์เดียวกันหรือผ่าน gpg จะต้องเป็น Good signature

18. ได้ดำเนินการสร้างความแข็งแกร่งให้กับบริการเครือข่ายต่างๆ เช่น Apache MySQL FTP DNS SMTP หรืออื่นๆ ที่ใช้งานอยู่บนระบบปฏิบัติการนั้นหรือไม่

คำตอบ : การสร้างความแข็งแกร่งให้กับบริการที่ใช้งาน เช่น Apache MySQL FTP DNS SMTP หรืออื่นๆ จะสามารถช่วยลดความเสี่ยงที่ระบบจะถูกบุกรุกได้ เช่น การอุดช่องโหว่ในบริการเหล่านั้น เป็นต้น
การสร้างความแข็งแกร่งให้กับบริการ Apache สามารถดูรายละเอียดได้จาก
http://thaicert.nectec.or.th/paper/unix_linux/apache_chklist.php และ http://thaicert.nectec.or.th/paper/unix_linux/harden_apache.php
สำหรับบริการ MySQL สามารถดูรายละเอียดได้จาก http://thaicert.nectec.or.th/paper/unix_linux/mysql.php
สำหรับบริการ FTP สามารถดูรายละเอียดได้จาก http://thaicert.nectec.or.th/paper/unix_linux/wuftp.php
สำหรับบริการ DNS สามารถดูรายละเอียดได้จาก http://thaicert.nectec.or.th/paper/unix_linux/dns-sec-part1.php
สำหรับบริการ SMTP สามารถดูรายละเอียดได้จาก http://thaicert.nectec.or.th/paper/unix_linux/sendmail.php

19. ในกรณีที่ระบบที่ติดตั้งระบบปฏิบัติการลินุกซ์นี้จำเป็นต้องให้บริการเครือข่าย เช่น Apache SSH หรือ FTP ได้มีการจำกัดการเข้าใช้บริการหรือไม่

คำตอบ : เพื่อลดความเสี่ยงในการบุกรุกระบบ ให้จำกัดการเข้าใช้บริการเครือข่ายโดยอนุญาตให้เฉพาะผู้ที่มีสิทธิหรือไซต์ที่ได้รับอนุญาตเท่านั้นจึงจะสามารถเข้าใช้บริการได้ วิธีการในการจำกัด ได้แก่ การใช้บริการ xinetd (ดูรายละเอียดเพิ่มเติมจาก http://thaicert.nectec.or.th/paper/unix_linux/xinetd.php) หรือใช้ไฟร์วอลล์
เช่น iptables (ดูรายละเอียดเพิ่มที่ http://thaicert.nectec.or.th/paper/firewall/iptables.php)

20. สำหรับระบบที่ต้องการความปลอดภัยสูง ได้อนุญาตให้ root สามารถล็อกอินเข้าใช้งานจากทางไกลหรือไม่

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

21. ได้สร้างความปลอดภัยทางกายภาพให้กับระบบอย่างพอเพียงหรือไม่

คำตอบ : ให้สร้างความปลอดภัยทางกายภาพให้กับระบบอย่างพอเพียง ได้แก่ การควบคุมการเข้าใช้งาน console ของระบบ มีกุญแจสำหรับล็อกเครื่อง อาจมีห้องเพื่อควบคุมการเข้าออก มีระบบสำรองไฟ UPS เป็นต้น ดูแนวทางการป้องกันทางกายภาพเพิ่มเติมจาก http://thaicert.nectec.or.th/paper/basic/physical_security.php

22. ได้กำหนดรหัสผ่านที่ BIOS เพื่อป้องกันไม่ให้ผู้ไม่ประสงค์ดีเข้าไปทำการปรับเปลี่ยนค่าพารามิเตอร์ต่างๆ หรือไม่

คำตอบ : เนื่องจาก BIOS มีความสำคัญต่อโปรแกรมที่ใช้บูตเข้าระบบ ให้กำหนดรหัสผ่านที่ BIOS เพื่อป้องกันการเข้าไปปรับเปลี่ยนค่าต่างๆ โดยผู้ไม่ประสงค์ดีหรือด้วยความไม่ตั้งใจก็ตาม

23. ได้ตรวจสอบการกำหนดสิทธิการใช้งานของไฟล์ระบบที่สำคัญๆ อย่างสม่ำเสมอหรือไม่

คำตอบ : การกำหนดสิทธิการใช้งานของไฟล์สำคัญๆ ในระบบอย่างไม่ถูกต้อง อาจทำให้ผู้ไม่ประสงค์ดีสามารถเขียนทับไฟล์ของระบบ แก้ไขหรือสามารถลบบางไฟล์ทิ้งไปได้ จึงต้องกำหนดสิทธิการใช้งานของไฟล์ให้เหมาะสม ให้ทำการศึกษาเรื่องการกำหนดสิทธิได้จาก http://thaicert.nectec.or.th/paper/unix_linux/file_permission.php


ตัวอย่างการกำหนดสิทธิการใช้งานไฟล์ของระบบให้เหมาะสม ได้แก่

/etc/login.defs มีค่า 600
/etc/cron.d มีค่า 600
/etc/xinetd.conf มีค่า 600
/etc/security มีค่า 600
/etc/services มีค่า 644
/etc/utmp มีค่า 644
/etc/adm/wtmp มีค่า 644
/etc/motd มีค่า 644
/etc/mtab มีค่า 644
/etc/syslog.pid มีค่า 644

24. ได้ใช้ SSH สำหรับการเข้าถึงระบบจากทางไกลหรือไม่ (แทนการใช้งาน telnet rlogin, rsh, ftp, rcp)

คำตอบ : SSH เป็นโปรแกรมสำหรับการเข้าถึงระบบจากทางไกลโดยข้อมูลที่มีการส่งผ่านไปมาระหว่างโปรแกรม (เครื่องลูกข่าย) กับระบบ (เครื่องแม่ข่าย) จะได้รับการเข้ารหัส ซึ่งทำให้เป็นการยากที่ผู้ไม่ประสงค์ดีจะนำข้อมูลเหล่านั้นไปใช้ประโยชน์ได้
ถ้าระบบในปัจจุบันยังใช้งานซอฟต์แวร์ประเภท telnet rlogin rsh ftp rcp ในการเข้าถึงเครือข่ายจากทางไกล ให้เปลี่ยนมาใช้ SSH (http://www.openssh.org) แทน ทั้งนี้เพื่อความปลอดภัยของระบบ (ดูรายละเอียดเพิ่มที่ http://thaicert.nectec.or.th/paper/basic/Secure_Shell.php)


25. ได้ทำการสำรองข้อมูลที่สำคัญๆ อย่างสม่ำเสมอหรือไม่

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

26. ได้ติดตามข่าวสารเกี่ยวกับความปลอดภัยของระบบที่ใช้งานอย่างสม่ำเสมอหรือไม่

คำตอบ : ให้ติดตามข่าวสารด้านความปลอดภัยอย่างสม่ำเสมอ เช่น ช่องโหว่ของซอฟต์แวร์ที่ใช้งานและซอฟต์แวร์สำหรับอุดช่องโหว่นั้น เพื่อจะได้ทำการปรับปรุงระบบให้มีความปลอดภัยอยู่เสมอ

27. ได้เคยใช้ซอฟต์แวร์เพื่อช่วยตรวจสอบและแก้ไขความไม่ปลอดภัยของระบบภายหลังการติดตั้งหรือไม่

คำตอบ : เพื่อเป็นการตรวจสอบระบบอีกครั้งเพื่อความมั่นใจ มีซอฟต์แวร์แพ็กเก็จเป็นจำนวนมาก อาทิ Bastille (ให้ดูรายละเอียดเพิ่มเติมได้ที่ http://thaicert.nectec.or.th/paper/unix_linux/bastille2.php) ซึ่งสามารถช่วยค้นหาจุดต่างๆ ที่อาจเป็นจุดอ่อนหรือควรได้รับการปรับแต่งเพื่อให้มีความปลอดภัยที่ดีขึ้น

28. ได้ตรวจสอบว่าโมดูล PAM (Pluggable Authentication Modules) ซึ่งใช้ในการพิสูจน์ตัวตนก่อนที่จะอนุญาตให้ผู้ใช้เข้าสู่ระบบ ได้ถูกใช้งานโดยบริการที่จำเป็นต้องมีการพิสูจน์ตัวตน เช่น บริการ SSH samba chsh reboot smtp แล้วหรือไม่

คำตอบ : ให้ตรวจสอบว่าบริการที่ใช้งาน เช่น SSH (sshd) ใช้งานโมดูล PAM หรือไม่โดยสามารถตรวจสอบได้ดังนี้

#ldd /user/sbin/sshd
libpam.so.0 => /lib/libpam.so.0 (0x40020000)
libdl.so.2 => /lib/libdl.so.2 (0x40029000)
libresolv.so.2 => /lib/libresolv.so.2 (0x4002c000

ให้สังเกตในบรรทัด libpam.so.0 => /lib/libpam.so.0 (0x40020000) ซึ่งจะเห็นได้ว่าได้มีการใช้งาน PAM กับบริการ SSH แล้ว
รวมทั้งให้ตรวจสอบไฟล์ในไดเร็คทอรี่ /etc/pam.d (หรือ /etc/pam.d สำหรับบางระบบปฏิบัติการ) ว่าถูกเปลี่ยนแปลงแก้ไขหรือไม่ ไฟล์ทั้งหมดในไดเร็คทอรี่นี้โดยปกตินับตั้งแต่ติดตั้งระบบเสร็จเรียบร้อยแล้ว ไม่ควรที่จะถูกเปลี่ยนแปลงแก้ไขใดๆ สำหรับวิธีการตรวจสอบการเปลี่ยนแปลงแก้ไขไฟล์ในระบบ ให้ดูข้อมูลได้จาก http://thaicert.nectec.or.th/paper/ids/tripwire.php

29. ได้ทำการตรวจสอบและแก้ไขไฟล์ /etc/login.defs เพื่อกำหนดนโยบายการล็อกอินเข้าสู่ระบบที่มีความปลอดภัยแล้วหรือไม่ เช่น ต้องมีการเปลี่ยนรหัสผ่านตามระยะเวลาที่เหมะสม ความยาวของรหัสผ่านต้องมีความยาวอย่างน้อยตามที่กำหนดไว้ เป็นต้น

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

PASS_MAX_DAYS 90 #คือการให้เปลี่ยนรหัสผ่านทุกๆ 90 วัน
PASS_MIN_LEN 8 #คือความยาวน้อยที่สุดของรหัสผ่าน

และค่าพารามิเตอร์อื่นๆ ที่ควรได้รับการปรับแต่งให้มีความปลอดภัยที่สูงขึ้น

30. ได้กำหนดสิทธิการใช้งานคำสั่ง su เพื่อแปลงผู้ใช้ที่ไม่ได้เป็น root และใช้คำสั่งนี้ให้กลายเป็น root โดยให้สิทธิเฉพาะผู้ใช้บางกลุ่มในระบบเท่านั้นแล้วหรือไม่

คำตอบ : ให้ตรวจสอบและแก้ไขไฟล์ /etc/pam.d/su สมมติว่าต้องการให้กลุ่ม pong เท่านั้นที่สามารถ su มาเป็น root ได้ ให้แก้ไขดังนี้

auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=pong

31. ได้ตรวจสอบการเปลี่ยนแปลงแก้ไขไฟล์ในระบบที่สำคัญ ๆ อย่างสม่ำเสมอหรือไม่เช่น ไฟล์ที่เป็นไบนารี่ ไฟล์คอนฟิกต่างๆ ไฟล์ที่อยู่ในไลบรารี่ เป็นต้น ซึ่งไม่สมควรถูกเปลี่ยนแปลงแก้ไขเป็นอย่างยิ่ง เว้นไว้แต่ว่าผู้ดูแลระบบเป็นผู้ดำเนินการเอง

คำตอบ : การบุกรุกระบบที่เกิดขึ้นแล้วหลายๆ ครั้ง ผู้บุกรุกมักจะทำการติดตั้งโปรแกรมประเภทประตูลับ (Backdoor) เอาไว้ เพื่อที่จะสามารถหวนคืนกลับเข้ามาสู่ระบบได้อีก การตรวจสอบการเปลี่ยนแปลงแก้ไขไฟล์อย่างสม่ำเสมอโดยผู้ดูแลระบบอาจจะทำให้พบว่า ณ ขณะนี้ไฟล์บางไฟล์ถูกเปลี่ยนแปลงแก้ไขโดยไม่ได้รับอนุญาต ซึ่งอาจหมายถึงว่าได้มีการบุกรุกเกิดขึ้นแล้ว
สำหรับวิธีการตรวจสอบการเปลี่ยนแปลงแก้ไขไฟล์ในระบบ ให้ดูข้อมูลได้จาก http://thaicert.nectec.or.th/paper/ids/tripwire.php


--------------------------------------------------------------------------------

แหล่งข้อมูลอ้างอิง

http://thaicert.nectec.or.th/paper/unix_linux/Linux_Installation.php
http://thaicert.nectec.or.th/paper/unix_linux/up2date.php
http://thaicert.nectec.or.th/paper/unix_linux/linux_syslog.php
http://thaicert.nectec.or.th/paper/unix_linux/syslog-ng.php
http://thaicert.nectec.or.th/paper/unix_linux/swatch.php
http://thaicert.nectec.or.th/paper/unix_linux/disable_system_services.php
http://thaicert.nectec.or.th/paper/unix_linux/apache_chklist.php
http://thaicert.nectec.or.th/paper/unix_linux/harden_apache.php
http://thaicert.nectec.or.th/paper/unix_linux/mysql.php
http://thaicert.nectec.or.th/paper/unix_linux/wuftp.php
http://thaicert.nectec.or.th/paper/unix_linux/dns-sec-part1.php
http://thaicert.nectec.or.th/paper/unix_linux/sendmail.php
http://thaicert.nectec.or.th/paper/unix_linux/xinetd.php
http://thaicert.nectec.or.th/paper/firewall/iptables.php
http://thaicert.nectec.or.th/paper/basic/physical_security.php
http://thaicert.nectec.or.th/paper/unix_linux/file_permission.php
http://thaicert.nectec.or.th/paper/basic/Secure_Shell.php
http://thaicert.nectec.or.th/paper/unix_linux/bastille2.php
http://thaicert.nectec.or.th/paper/unix_linux/disable_system_services.php
http://thaicert.nectec.or.th/paper/ids/tripwire.php

วิธีการที่ผู้ใช้งานเครื่องคอมพิวเตอร์ควรใช้ในการป้องกันระบบคอมพิวเตอร์ของตนที่บ้าน

CERT/CC แนะนำให้ผู้ใช้งานเครื่องคอมพิวเตอร์ที่บ้านปฏิบัติตามขั้นตอนต่อไปนี้


ขอคำปรึกษาจากผู้ให้บริการหรือผู้ดูแลโดยตรง หากจำเป็นต้องทำงานจากที่บ้าน
นำซอฟต์แวร์ป้องกันไวรัสมาใช้งาน
ใช้ไฟร์วอลล์
ไม่เปิดไฟล์ที่ไม่รู้จักซึ่งถูกแนบมากับ e-mail
ไม่เรียกใช้งานโปรแกรมที่ไม่ทราบที่มา
ยกเลิกการใช้งานออปชัน "hide file extensions"
ติดตั้ง patch ให้กับแอพลิเคชันที่ใช้งาน (รวมถึงระบบปฏิบัติการ)
ปิดเครื่องคอมพิวเตอร์หรือหยุดการเชื่อมต่อกับเครือข่ายทันทีที่เลิกใช้งาน
ยกเลิกการใช้งาน Java, JavaScript และ ActiveX ให้มากที่สุดเท่าที่จะเป็นไปได้
ยกเลิกการใช้งานสคริปต์ที่เกี่ยวกับลักษณะพิเศษต่างๆ ในโปรแกรม e-mail
ทำการสำรองข้อมูลที่สำคัญ
ทำแผ่นบูทเพื่อใช้งานในกรณีที่เครื่องคอมพิวเตอร์เกิดความเสียหายหรือถูกบุกรุก
รายละเอียดเพิ่มเติมของคำแนะนำแต่ละข้อได้อธิบายไว้ด้านล่าง

คำแนะนำ

1. ขอคำปรึกษาจากผู้ให้บริการหรือผู้ดูแลโดยตรง หากจำเป็นต้องทำงานจากที่บ้าน


ถ้าเป็นการใช้งานที่มีเข้าถึงแบบ broadband เพื่อเชื่อมต่อไปยังเครือข่ายขององค์กร ไม่ว่าจะเป็นการใช้ Virtual Private Network (VPN) หรือวิธีอื่นๆ ก็ตาม ทางองค์กรมักจะมีนโยบายหรือกระบวนการที่เกี่ยวข้องกับความปลอดภัยในการใช้งานเครื่องคอมพิวเตอร์ที่บ้านให้ผู้ใช้ปฏิบัติ ดังนั้น ผู้ใช้จึงควรขอคำปรึกษาจากผู้รับผิดชอบดูแลด้านนี้โดยตรงตามความเหมาะสม ก่อนที่จะปฏิบัติตามคำแนะนำภายในเอกสารฉบับนี้

2. นำซอฟต์แวร์ป้องกันไวรัสมาใช้งาน


CERT/CC แนะนำให้นำซอฟต์แวร์ anti-virus มาใช้งานที่เครื่องคอมพิวเตอร์ทุกเครื่องที่เชื่อมต่ออินเทอร์เน็ต โดยที่ผู้ใช้ทุกคนจะต้องปรับปรุงข้อมูลของโปรแกรม anti-virus ในเครื่องคอมพิวเตอร์ของตนให้ทันสมัยอยู่เสมอ ผลิตภัณฑ์ anti-virus หลายอันรองรับการทำงานแบบอัพเดตข้อมูลประวัติไวรัส (บางครั้งเรียกว่า virus definition) โดยอัตโนมัติ ซึ่ง CERT/CC แนะนำให้ผู้ใช้ทุกคนทำการอัพเดตข้อมูลโดยอัตโนมัติทันทีที่มีข้อมูลใหม่ออกมา


อ่านรายละเอียดเพิ่มเติมได้ที่ http://www.cert.org/other_sources/viruses.html#VI

3. ใช้ไฟร์วอลล์


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

4. ไม่เปิดไฟล์ที่ไม่รู้จักซึ่งถูกแนบมากับ e-mail


ก่อนที่ผู้ใช้จะเปิดไฟล์แนบใดๆ ที่ส่งมากับ e-mail ผู้ใช้ควรจะแน่ใจก่อนว่าไฟล์นั้นมาจากที่ใด การทราบเพียงว่าใครเป็นผู้ส่ง e-mail ฉบับนั้นมาให้ตนหรือ e-mail address ต้นทางที่ส่งมาเป็นผู้ที่ตนเองรู้จักเท่านั้นถือว่าไม่พียงพอ ไวรัส Melissa แพร่กระจายได้อย่างรวดเร็ว เนื่องจากถูกส่งจาก e-mail address ที่ผู้รับคุ้นเคย นอกจากนั้นโค้ดโปรแกรมที่มีจุดประสงค์ร้ายหลายอันอาจจะแพร่กระจายผ่านโปรแกรมที่ให้ความบันเทิงหรือโปรแกรมล่อลวงอื่นๆ


หากผู้ใช้มีความจำเป็นจะต้องเปิดไฟล์ที่แนบมาก่อนที่จะสามารถตรวจสอบแหล่งที่มาของไฟล์ได้ ขอให้ปฏิบัติตามขั้นตอนต่อไปนี้

ทำการอัพเดตข้อมูลรูปแบบไวรัสในเครื่องให้ทันสมัยที่สุด (อ่านรายละเอียดเพิ่มเติมได้จากข้อ "นำซอฟต์แวร์ป้องกันไวรัสมาใช้งาน" ด้านบน)
บันทึกไฟล์ดังกล่าวลงในฮาร์ดดิสก์
ตรวจสอบไฟล์โดยใช้ซอฟต์แวร์ anti-virus ที่มีในเครื่อง
เปิดไฟล์
นอกจากนั้น อีกสิ่งที่ควรทำก่อนที่จะเปิดไฟล์คือให้ยกเลิกการเชื่อมต่อเครื่องคอมพิวเตอร์เข้ากับเครือข่าย
การปฏิบัติตามขั้นตอนที่กล่าวมานี้จะช่วยลดความเสี่ยง แต่ไม่สามารถทำให้ความเสี่ยงหมดไปได้ โอกาสที่โปรแกรมทำลายระบบซึ่งแนบมากับ e-mail เหล่านั้นจะแพร่กระจายจากเครื่องคอมพิวเตอร์ของผู้ใช้ไปยังเครื่องอื่นๆ ยังคงมีอยู่

5. ไม่เรียกใช้งานโปรแกรมที่ไม่ทราบที่มา


ไม่ควรใช้งานโปรแกรมใดๆ ที่ไม่ทราบว่าถูกพัฒนาขึ้นโดยนักพัฒนาโปรแกรมหรือบริษัทที่เชื่อถือหรือไม่ และไม่ควรส่งโปรแกรมที่ตนเองไม่รู้ที่มาไปให้เพื่อนหรือเพื่อนร่วมงานโดยเด็ดขาด แม้ว่าโปรแกรมดังกล่าวจะเป็นโปรแกรมที่ให้ความสนุกสนานก็ตาม เพราะโปรแกรมลักษณะดังกล่าวมักจะมีโปรแกรม trojan แฝงมาด้วยเสมอ

6. ยกเลิกการใช้งานออปชัน "hide file extensions"


ในระบบปฏิบัติการวินโดวส์มีออปชันอันหนึ่งคือ "Hide file extensions for known file types" โดยปกติแล้วระบบจะตั้งค่าให้ออปชันนี้ทำงาน แต่ผู้ใช้สามารถยกเลิกการใช้งานออปชันนี้ได้เพื่อให้มีการแสดงนามสกุลของไฟล์ทั้งหมดบนหน้าจอ หลังจากที่ยกเลิกออปชันนี้ จะยังคงมีไฟล์บางไฟล์ที่ไม่แสดงนามสกุลเนื่องจากถูกระบบกำหนดไว้


เนื่องจากมี registry อยู่ 1 ค่าซึ่งหากมีการตั้งค่าให้กับ registry นี้แล้ว จะทำให้ระบบปฏิบัติการซ่อนนามสกุลของไฟล์ โดยไม่คำนึงว่าค่าที่กำหนดให้กับออปชัน "Hide file extensions for known file types" บนระบบปฏิบัติการคืออะไร นั่นคือ registry ชื่อ "NeverShowExt" จะเป็นตัวกำหนดการซ่อนนามสกุลของไฟล์ชนิดพื้นฐานที่ใช้งานในระบบปฏิบัติการวินโดวส์ เช่น ".LNK" ซึ่งเป็นนามสกุลของช็อตคัท (shortcut) จะยังคงถูกซ่อนไว้แม้ว่าจะยกเลิกออปชัน "Hide file extensions for known file types" แล้วก็ตาม


คำสั่งเฉพาะอื่นๆ ที่ใช้ในการยกเลิกการซ่อนนามสกุลของไฟล์ ถูกรวบรวมไว้ใน http://www.cert.org/incident_notes/IN-2000-07.html

7. ติดตั้ง patch ให้กับแอพลิเคชันที่ใช้งาน (รวมถึงระบบปฏิบัติการ)


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


แอพลิเคชันบางอันมีความสามารถที่จะตรวจสอบว่าจะต้องทำการอัพเดตหรือไม่ได้โดยอัตโนมัติ และผู้ผลิตหลายรายยังได้จัดเตรียมการแจ้งเตือนการอัพเดตให้กับผู้ใช้โดยอัตโนมัติผ่านทาง mailing list ผู้ใช้สามารถหาข้อมูลเพิ่มเติมได้จากเว็บไซต์ของผู้ผลิตโดยตรง ถ้าหากไม่มีกระบวนการทั้งสองอย่างที่กล่าวมานี้ ผู้ใช้จำเป็นจะต้องเข้าไปตรวจสอบด้วยตนเองเป็นระยะๆ ว่ามี patch ใดที่ควรนำมาทำการอัพเดตให้กับซอฟต์แวร์ในเครื่องคอมพิวเตอร์ของตนหรือไม่

8. ปิดเครื่องคอมพิวเตอร์หรือหยุดการเชื่อมต่อกับเครือข่ายทันทีที่เลิกใช้งาน


ผู้ใช้ควรปิดเครื่องคอมพิวเตอร์ของตน หรือยกเลิกการเชื่อมต่อกับเครือข่ายทันทีที่ไม่ต้องการใช้งาน ผู้บุกรุกจะไม่สามารถโจมตีเครื่องคอมพิวเตอร์ใดๆ ได้ ถ้าหากเครื่องคอมพิวเตอร์ดังกล่าวปิด หรือได้ยกเลิกการเชื่อมต่ออินเทอร์เน็ตอย่างสมบูรณ์แล้ว

9. ยกเลิกการใช้งาน Java, JavaScript และ ActiveX ให้มากที่สุดเท่าที่จะเป็นไปได้

ผู้ใช้จะต้องระมัดระวังความเสี่ยงที่เกิดขึ้นจากการใช้งาน "mobile code" เช่น ActiveX, Java และ JavaScript ผู้พัฒนาเว็บโดยมีจุดประสงค์ร้ายบางคนบางคนอาจจะเขียนสคริปต์การทำงานบางอย่างรวมไว้ในโค้ดโปรแกรมของตน แล้วส่งไปยังเว็บไซต์ เช่น ค่า URL (Uniform Resource Locator), ส่วนใดส่วนหนึ่งของฟอร์ม หรือการสืบค้นฐานข้อมูล หลังจากนั้น เมื่อเว็บไซต์ดังกล่าวตอบรับการขอใช้งานจากผู้ใช้ สคริปต์ส่วนดังกล่าวนี้จะถูกส่งมายังบราวเซอร์ที่เครื่องคอมพิวเตอร์ของผู้ใช้ด้วย


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


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


รายละเอียดเกี่ยวกับคำสั่งในการยกเลิกการใช้งานภาษาสคริปต์บนบราวเซอร์สามารถอ่านได้ที่ http://www.cert.org/tech_tips/malicious_code_FAQ.html


รายละเอียดเพิ่มเติมเกี่ยวกับความปลอดภัยของ ActiveX รวมไปถึงข้อแนะนำสำหรับผู้ใช้ที่ต้องดูแลเครื่องคอมพิวเตอร์ของตนเอง สามารถอ่านเพิ่มเติมได้ที่ http://www.cert.org/archive/pdf/activeX_report.pdf


รายละเอียดเกี่ยวกับความเสี่ยงที่เกิดจากโปรแกรมการทำงานที่มีจุดประสงค์ในการทำลายระบบผ่านทางเว็บไซต์สามารถอ่านได้จาก CA-2000-02 Malicious HTML Tags Embedded in Client Web Requests

10. ยกเลิกการใช้งานสคริปต์ที่เกี่ยวกับลักษณะพิเศษต่างๆ ในโปรแกรม e-mail


โปรแกรมที่ใช้ในการรับส่ง e-mail หลายโปรแกรมที่ถูกพัฒนาขึ้นในลักษณะเดียวกับโปรแกรมบราวเซอร์ในการเปิดไฟล์ชนิด HTML ส่งผลให้โปรแกรม e-mail เหล่านั้นได้รับผลกระทบจากการใช้งาน ActiveX, Java และ JavaScript ได้เช่นเดียวกับการใช้งานเว็บเพจ ดังนั้น นอกจากยกเลิกการใช้งานสคริปต์ในโปรแกรมเว็บบราวเซอร์แล้ว (อ่านรายละเอียดได้จากหัวข้อ "ยกเลิกการใช้งาน Java, JavaScript และ ActiveX ให้มากที่สุดเท่าที่จะเป็นไปได้") CERT/CC ยังขอแนะนำให้ผู้ใช้ยกเลิกการใช้งานสคริปต์ที่เกี่ยวข้องกับลักษณะพิเศษต่างๆ เหล่านี้บนโปรแกรม e-mail ด้วย

11. ทำการสำรองข้อมูลที่สำคัญ


ผู้ใช้ควรทำการเก็บสำรองไฟล์ที่สำคัญลงบนสื่อเก็บข้อมูลที่สามารถเคลื่อนย้ายได้ง่าย เช่น ZIP disk หรือ CD-ROM ชนิดที่บันทึกข้อมูลได้ อาจทำการสำรองข้อมูลโดยการใช้ซอฟต์แวร์ และนำดิสก์เหล่านี้ไปเก็บที่อื่นให้ห่างจากเครื่องคอมพิวเตอร์

12. ทำแผ่นบูทเพื่อใช้งานในกรณีที่เครื่องคอมพิวเตอร์เกิดความเสียหายหรือถูกบุกรุก

ขั้นตอนเบื้องต้นในการกู้คืนระบบถ้าหากเครื่องคอมพิวเตอร์ได้รับความเสียหาย ถูกละเมิดความปลอดภัยหรือเกิดปัญหากับฮาร์ดดิสก์ คือการเตรียมแผ่นบูทโดยใช้แผ่นดิสก์ 1 แผ่นไว้ล่วงหน้า สามารถนำเอาแผ่นบูทนี้ไปใช้ในการกู้คืนระบบที่เกิดปัญหาต่างๆ ดังที่กล่าวมาแล้วได้ ข้อควรจำก็คือ ผู้ใช้เครื่องคอมพิวเตอร์จะต้องจัดเตรียมแผ่นบูทนี้ไว้ก่อนที่เครื่องคอมพิวเตอร์จะได้รับอันตรายจากเหตุการณ์ความปลอดภัยต่างๆ

Appendix : แหล่งอ้างอิงและข้อมูลเพิ่มเติม


รายละเอียดในส่วนต่อไปนี้ประกอบด้วยลิงก์ไปยังแหล่งอ้างอิง และแหล่งข้อมูลเพิ่มเติมทั้งหมดที่เกี่ยวข้องกับเอกสารฉบับนี้

แหล่งอ้างอิง


ลิงก์ของเอกสารที่นำมารวบรวมไว้ในหัวข้อนี้ เป็นแหล่งข้อมูลที่นำมาใช้อ้างอิงในเอกสารฉบับนี้ทั้งหมด

ข้อมูลจาก CERT Advisory
ข้อมูลจาก CERT Incident Note
ข้อมูลจาก CERT Vulnerability Note
ข้อมูลจาก CERT Tech Tip
ข้อมูลจากเอกสารอื่นๆ ของ CERT
ข้อมูลจาก CERT Advisory


CA-1999-02: Trojan Horses


http://www.cert.org/advisories/CA-1999-02.html

CA-1999-04: Melissa Macro Virus


http://www.cert.org/advisories/CA-1999-04.html

CA-2000-01: Denial-of-Service Developments


http://www.cert.org/advisories/CA-2000-01.html

CA-2000-02: Malicious HTML Tags Embedded in Client Web Requests


http://www.cert.org/advisories/CA-2000-02.html

ข้อมูลจาก CERT Incident Note


IN-2000-01: Windows Based DDOS Agents


http://www.cert.org/incident_notes/IN-2000-01.html

IN-2000-02: Exploitation of Unprotected Windows Networking Shares


http://www.cert.org/incident_notes/IN-2000-02.html

IN-2000-03: 911 Worm


http://www.cert.org/incident_notes/IN-2000-03.html

IN-2000-07: Exploitation of Hidden File Extensions


http://www.cert.org/incident_notes/IN-2000-07.html

IN-2000-08: Chat Clients and Network Security


http://www.cert.org/incident_notes/IN-2000-08.html

ข้อมูลจาก CERT Vulnerability Note


VN-98.07: Back Orifice

http://www.cert.org/vul_notes/VN-98.07.backorifice.html

ข้อมูลจาก CERT Tech Tip


Frequently Asked Questions About Malicious Web Scripts Redirected by Web Sites

http://www.cert.org/tech_tips/malicious_code_FAQ.html

Protecting Yourself from Email-borne Viruses and Other Malicious Code During Y2K and Beyond


http://www.cert.org/tech_tips/virusprotection.html

Spoofed/Forged Email


http://www.cert.org/tech_tips/email_spoofing.html

Windows 95/98 Computer Security Information


http://www.cert.org/tech_tips/win-95-info.html

ข้อมูลจากเอกสารอื่นๆ ของ CERT


Other Computer Virus Resources

http://www.cert.org/other_sources/viruses.html

Securing Desktop Workstations

http://www.cert.org/security-improvement/modules/m04.html

Results of the Security in ActiveX Workshop


http://www.cert.org/archive/pdf/activeX_report.pdf

Security of the Internet

http://www.cert.org/encyc_article/tocencyc.html#PackSnif

แหล่งข้อมูลเพิ่มเติม


ผู้อ่านสามารถหาข้อมูลเพิ่มเติมจากรายละเอียดในเอกสารฉบับนี้ ได้ตามลิงก์ต่อไปนี้
TCP/IP Frequently Asked Questions

http://www.faqs.org/faqs/internet/tcp-ip/tcp-ip-faq/part1/
http://www.faqs.org/faqs/internet/tcp-ip/tcp-ip-faq/part2/

Computer Virus Frequently Asked Questions for New Users


http://www.faqs.org/faqs/computer-virus/new-users/

alt.comp.virus Frequently Asked Questions

http://www.faqs.org/faqs/computer-virus/alt-faq/part1/
http://www.faqs.org/faqs/computer-virus/alt-faq/part2/
http://www.faqs.org/faqs/computer-virus/alt-faq/part3/
http://www.faqs.org/faqs/computer-virus/alt-faq/part4/

VIRUS-L/comp.virus Frequently Asked Questions


http://www.faqs.org/faqs/computer-virus/faq/

Firewalls Frequently Asked Questions

http://www.faqs.org/faqs/firewalls-faq/

ความเสี่ยงด้านความปลอดภัยคอมพิวเตอร์ต่อผู้ใช้งานเครื่องคอมพิวเตอร์ที่บ้าน

A. ความเสี่ยงหมายถึงอะไร


ความปลอดภัยของข้อมูลจะพิจารณาจาก 3 ส่วนที่เกี่ยวข้องดังนี้


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

คำนิยามเหล่านี้นำไปประยุกต์ใช้กับการใช้งานเครือข่ายคอมพิวเตอร์ที่บ้านได้เช่นเดียวกับการใช้งานเครือข่ายขององค์กร ผู้ใช้ทั่วไปคงไม่ต้องการให้ผู้อื่นอ่านเอกสารสำคัญของตน ในทำนองเดียวกัน ผู้ใช้ก็คงต้องการที่จะให้งานทั้งหมดที่ตนเองเก็บไว้ในเครื่องคอมพิวเตอร์เป็นความลับ ไม่ว่าจะเป็นข้อมูลส่วนที่เกี่ยวกับการลงทุนหรือข้อความใน e-mail ที่ส่งไปยังเพื่อนและครอบครัวก็ตาม ผู้ใช้ควรจะสามารถมั่นใจได้ว่าข้อมูลที่ตนเองเก็บไว้ในเครื่องคอมพิวเตอร์ของตนจะยังคงไม่เปลี่ยนแปลงและพร้อมให้เรียกใช้งานได้ตลอดเวลา


บางครั้ง ความเสี่ยงด้านความปลอดภัยคอมพิวเตอร์ที่เพิ่มขึ้นเป็นผลมาจากการที่ผู้บุกรุกต้องการนำเอาเครื่องคอมพิวเตอร์ไปใช้งานเพื่อจุดประสงค์ร้าย แต่ก็มีความเสี่ยงอื่นๆ ที่เกิดขึ้นแม้ว่าผู้ใช้จะไม่ได้เชื่อมต่อเครื่องคอมพิวเตอร์ของตนเองกับอินเทอร์เน็ตก็ตาม (เช่น ความผิดพลาดของฮาร์ดดิสก์ การถูกลักขโมย กระแสไฟฟ้าที่ใช้งานไม่เพียงพอ) ข่าวร้ายก็คือ ผู้ใช้ไม่สามารถเตรียมการเพื่อรับมือกับความเสี่ยงเหล่านี้ได้ทั้งหมด ส่วนข่าวดีก็คือ มีขั้นตอนง่ายๆ ที่ผู้ใช้สามารถนำไปใช้เพื่อลดโอกาสที่จะเกิดเหตุการณ์เหล่านี้ได้ นอกจากนั้น บางขั้นตอนยังช่วยป้องกันความเสี่ยงที่อาจจะขึ้นทั้งโดยเจตนาหรือไม่เจตนาก็ตามที่ผู้ใช้อาจจะประสบได้อีกด้วย


ก่อนที่จะนำเสนอถึงวิธีการในการป้องกันเครื่องคอมพิวเตอร์และเครือข่ายคอมพิวเตอร์ที่ใช้งานที่บ้าน จะขอนำเสนอถึงรายละเอียดของความเสี่ยงเหล่านี้พอสังเขป

B. การนำเครื่องคอมพิวเตอร์ไปใช้งานเพื่อจุดประสงค์ร้าย


วิธีการที่ผู้บุกรุกนิยมนำไปใช้เพื่อให้ได้รับสิทธิ์ในการควบคุมเครื่องคอมพิวเตอร์ที่ใช้งานที่บ้าน ได้ถูกนำมาอธิบายไว้ตามหัวข้อด้านล่าง รายละเอียดเพิ่มเติมสามารถศึกษาได้ตามรายการในส่วนของ แหล่งอ้างอิง ด้านล่าง


โปรแกรม Trojan
Back door และโปรแกรมควบคุมระบบจากระยะไกล (remote administration)
Denial of Service
การถูกใช้เป็นตัวกลางเพื่อการโจมตีระบบอื่นๆ
การไม่ป้องกันการแชร์ (share) ทรัพยากรบน Windows
Mobile code (เช่น Java, JavaScript และ ActiveX)
Cross-site scripting
E-mail spoofing
E-mail ที่ส่งมาพร้อมกับไวรัส
ออปชัน "hide file extensions"
โปรแกรมสนทนา (chat)
การดักจับ Packet
1. โปรแกรม Trojan


โปรแกรม Trojan เป็นวิธีการที่ผู้บุกรุกโดยทั่วไปใช้ในการหลอกลวงผู้ใช้เพื่อลักลอบติดตั้งโปรแกรมจำพวก back door (บางครั้งเรียกวิธีการดังกล่าวนี้ว่า "social engineering" ซึ่งหมายถึงเทคนิคการเข้าถึงข้อมูลในระบบด้วยการหลอกลวงหรือล่อหลอกให้ผู้อื่นหลงเชื่อ) ด้วยวิธีการนี้ทำให้ผู้บุกรุกเข้าถึงเครื่องคอมพิวเตอร์ของผู้ใช้ทั่วไปโดยที่ผู้ใช้ไม่รู้ตัว หลังจากนั้นผู้บุกรุกสามารถแก้ไขค่าใดๆ ในระบบ หรือนำเอาไวรัสคอมพิวเตอร์เข้ามาติดไว้ในเครื่องได้โดยง่าย รายละเอียดเพิ่มเติมเกี่ยวกับ trojan สามารถศึกษาได้จาก


http://www/cert.org/advisories/CA-99-02-Trijan-Horses.html

2. Back door และโปรแกรมควบคุมระบบจากระยะไกล (remote administration)


สำหรับเครื่องคอมพิวเตอร์ของผู้ใช้ที่ใช้ระบบปฏิบัติการวินโดวส์ เครื่องมือที่ผู้บุกรุกนิยมใช้เพื่อให้ตนเองได้รับสิทธิ์ในการเข้าถึงเครื่องคอมพิวเตอร์ดังกล่าวจากระยะไกลมี 3 อย่างคือ BackOrifice, Netbus และ SubSeven หลังจากที่ Back door หรือโปรแกรมควบคุมระบบจากระยะไกลเหล่านี้ถูกติดตั้งไว้ในเครื่องคอมพิวเตอร์แล้ว จะทำให้ผู้อื่นที่อยู่ภายนอกเข้าถึงและสามารถควบคุมเครื่องคอมพิวเตอร์เครื่องนั้นได้ จึงขอให้ผู้ใช้ทำการศึกษาเพิ่มเติมจากเอกสารของ CERT เรื่องช่องโหว่เกี่ยวกับ BackOrifice ซึ่งภายในเอกสารฉบับนี้จะอธิบายถึงวิธีการทำงานและกาตรวจหา รวมถึงการป้องกันเครื่องคอมพิวเตอร์จาก BackOrifice ที่นี่


http://www.cert.org/vul_notes/VN-98.07.backorifice.html

3. Denial of Service


Denial of Service (DoS) เป็นการโจมตีอีกรูปแบบหนึ่ง ซึ่งจะส่งผลให้เครื่องคอมพิวเตอร์ของผู้ใช้หยุดการทำงานโดยไม่ทราบสาเหตุหรือทำให้การทำงานของเครื่องเพิ่มมากขึ้นจนกระทั่งผู้ใช้ไม่สามารถใช้งานได้ ในหลายกรณี การนำ patch ล่าสุดมาติดตั้งลงในเครื่องจะช่วยป้องกันการโจมตีแบบนี้ได้ รายละเอียดเพิ่มเติมเกี่ยวกับ Denial of Service ได้ถูกอธิบายในเอกสารต่อไปนี้


http://www.cert.org/advisories/CA-2000-01.html

ข้อควรจำสำคัญอีกข้อหนึ่งคือ บางครั้งแทนที่เครื่องของผู้ใช้จะตกเป็นเป้าหมายของการโจมตีแบบ Denial of Service กลับถูกนำไปใช้เป็นส่วนหนึ่งในการสร้างการโจมตี Denial of Service ไปยังระบบอื่นแทนก็ได้

4. การถูกใช้เป็นตัวกลางเพื่อการโจมตีระบบอื่นๆ


ในหลายๆ ครั้ง ที่ผู้บุกรุกนำเครื่องคอมพิวเตอร์ที่ตนเองได้รับสิทธิ์ในการเข้าใช้งานไปใช้เป็นตัวกลางในการโจมตีระบบอื่น ตัวอย่างเช่น วิธีการโจมตีแบบ Distributed Denial of Service (DDoS) นั่นคือ ผู้บุกรุกจะติดตั้ง "agent" (ส่วนใหญ่มักเป็นโปรแกรมประเภท trojan) ให้ทำงานในเครื่องที่ตนเองได้รับสิทธิ์เข้าใช้งานดังกล่าว เพื่อให้เครื่องคอมพิวเตอร์เครื่องนั้นพร้อมที่จะรับคำสั่งต่อไป หลังจากที่ผู้บุกรุกสร้างเครื่องที่จะทำหน้าที่เป็น agent ได้ตามจำนวนที่ต้องการแล้ว จะมีเครื่องคอมพิวเตอร์เครื่องหนึ่งทำหน้าที่เป็น "handler" ทำการสั่งให้เครื่องที่เป็น agent ทั้งหมดทำการโจมตีแบบ Denial of Service ไปยังระบบอื่น ดังนั้น เป้าหมายสุดท้ายของการโจมตีจึงไม่ใช่เครื่องคอมพิวเตอร์ของผู้ใช้โดยตรง แต่เป็นเครื่องคอมพิวเตอร์เครื่องอื่น โดยเครื่องคอมพิวเตอร์ของผู้ใช้เป็นเพียงเครื่องช่วยขยายขอบเขตในการโจมตี

5. การไม่ป้องกันการแชร์ (share) ทรัพยากรบนวินโดวส์


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


http://www.cert.org/incident_notes/IN-2000-01.html

นอกจากนั้น ยังมีภัยจากโค้ดโปรแกรมที่มีจุดประสงค์ในการโจมตีหรือทำลายระบบ เช่น ไวรัส หรือ worm เมื่อเครื่องคอมพิวเตอร์ขาดการป้องกันการแชร์ทรัพยากรบนเครือข่าย โปรแกรมเหล่านี้จะสามารถแพร่กระจายเข้าไปในเครื่องได้โดยง่าย ตัวอย่างเช่น กรณีของ worm ชื่อ 911 ซึ่งได้อธิบายไว้ที่นี่


http://www.cert.org/incident_notes/IN-2000-03.html

ด้วยสาเหตุของการขาดการป้องกันการแชร์ทรัพยากรบนเครือข่ายนี้เองนี้เอง ส่งผลให้เครื่องมือบุกรุกชนิดอื่นๆ สามารถเข้าไปใช้งานหรือทำลายระบบได้อย่างง่ายดายและรวดเร็ว

6. Mobile code (เช่น Java, JavaScript และ ActiveX)


มีการรายงานปัญหาที่เกิดขึ้นจากการใช้ "mobile code" (เช่น Java, JavaScript และ ActiveX) ซึ่งโค้ดประเภทนี้ถือเป็นภาษาที่ใช้ในการเขียนโปรแกรมแบบหนึ่ง (บางครั้งอาจเรียกว่าสคริปต์) มีคุณสมบัติพิเศษคือ เป็นภาษาอนุญาตให้ผู้พัฒนาเว็บเขียนโปรแกรมขึ้นมา แล้วนำโปรแกรมที่ได้ไปทำงานบนบราวเซอร์ของผู้ใช้แต่ละคน (ต่างจากโปรแกรมที่เขียนด้วยภาษาอื่นๆ ซึ่งโปรแกรมจะทำงานที่เครื่องให้บริการ) ถึงแม้ว่าโค้ดที่เขียนขึ้นแบบนี้จะมีประโยชน์ต่อการใช้งาน แต่ก็เป็นวิธีการที่ผู้บุกรุกสามารถนำไปใช้เพื่อเก็บข้อมูลจากเครื่องคอมพิวเตอร์ของผู้ใช้ (เช่น ผู้ใช้เข้าเว็บไซต์ใดบ้าง) หรือเพื่อให้เกิดการเรียกโปรแกรมที่ใช้ในการบุกรุกระบบอื่นๆ ให้ทำงานที่เครื่องคอมพิวเตอร์ของผู้ใช้ ผู้ใช้สามารถแก้ไขได้โดยการยกเลิกการใช้งาน Java, JavaScript และ ActiveX ที่เว็บบราวเซอร์ในเครื่องคอมพิวเตอร์ของตน ซึ่งทาง CERT ขอแนะนำให้ผู้ใช้ทุกคนนำไปปฏิบัติทุกครั้งที่เข้าไปที่เว็บไซต์ที่ไม่คุ้นเคย หรือไม่น่าเชื่อถือ


นอกจากการเปิดเว็บแล้ว อีกทางหนึ่งที่ทำให้เกิดความเสี่ยงคือการโค้ดประเภทนี้ร่วมกับโปรแกรมรับส่ง e-mail ซึ่งโปรแกรมรับส่ง e-mail หลายโปรแกรมใช้โค้ดในลักษณะเดียวกับการที่บราวเซอร์ใช้ในการแสดงผล ทำให้ผลกระทบที่ได้รับจากการใช้งาน e-mail ก็มีลักษณะเช่นเดียวกับการใช้งานเว็บ


รายละเอียดเพิ่มเติมเกี่ยวกับโค้ดที่มีจุดประสงค์ในการทำความเสียหายให้แก่ระบบอยู่ที่ http://www.cert.org/tech_tips/malicious_code_FAQ.html


รายละเอียดเพิ่มเติมเกี่ยวกับความปลอดภัยในการใช้งาน ActiveX อยู่ที่ http://www.cert.org/archive/pdf/activeX_report.pdf

7. Cross-site scripting


ผู้พัฒนาเว็บโดยมีจุดประสงค์ร้ายบางคนอาจจะเขียนสคริปต์การทำงานบางอย่างรวมไว้ในโค้ดโปรแกรมของตน แล้วส่งไปยังเว็บไซต์ เช่น ค่า URL (Uniform Resource Locator), ส่วนใดส่วนหนึ่งของฟอร์ม หรือการสืบค้นฐานข้อมูล หลังจากนั้น เมื่อเว็บไซต์ดังกล่าวตอบรับการขอใช้งานจากผู้ใช้ สคริปต์ส่วนดังกล่าวนี้จะถูกส่งมายังบราวเซอร์ที่เครื่องคอมพิวเตอร์ของผู้ใช้ด้วย


ช่องทางที่ผู้ใช้ทำให้เว็บบราวเซอร์ของตนเองได้รับสคริปต์จำพวกนี้ได้แก่


เรียกดูลิงก์ (link) ตามที่ปรากฏในเว็บเพจ, e-mail หรือข้อความที่ปรากฏใน newsgroup โดยไม่ทราบว่าปลายทางของลิงก์ดังกล่าวคือที่ใด
ใช้งานฟอร์มที่ทำงานแบบ interactive ของเว็บไซต์ที่ไม่น่าเชื่อถือ
เรียกดูที่ห้องสนทนาหรืออื่นๆ ที่อนุญาตให้ผู้ใช้แต่ละคนใส่ข้อมูลที่เป็นทั้งข้อความธรรมดาและข้อความแบบ HTML ลงไปได้ และมีการอัพเดตตัวเองอยู่ตลอดเวลา

รายละเอียดเพิ่มเติมเกี่ยวกับความเสี่ยงนี้ได้แสดงไว้ในหัวข้อ malicious code ที่ CA-2000-02 Malicious HTML Tags Embedded in Client Web Requests

8. E-mail spoofing


E-mail "spoofing" คือ e-mail ที่ถูกส่งเข้ามาในระบบโดยที่ชื่อต้นทางของ e-mail ที่ปรากฏกับต้นทางของ e-mail ที่ใช้ส่งจริงไม่ตรงกัน จุดมุ่งหมายของ e-mail spoofing คือการลวงให้ผู้ได้รับเข้าใจผิด เพื่อให้เกิดความเสียหายแก่ระบบ หรือข้อมูลสำคัญ (เช่น รหัสผ่าน)


การส่ง e-mail โดยการ spoof นี้มีตั้งแต่ระดับที่ส่งเพื่อล้อเล่นไม่ได้มีเจตนาร้ายแรงใดๆ จนถึงระดับที่เป็น social engineering ตัวอย่างเช่น

e-mail จากผู้ดูแลระบบที่ส่งไปยังผู้ใช้ เพื่อสั่งให้ผู้ใช้เปลี่ยนรหัสผ่านของตนเองไปเป็นรหัสผ่านที่ผู้ส่งต้องการ พร้อมทั้งข่มขู่ผู้ใช้ว่า ถ้าไม่เปลี่ยนแปลงจะถูกระงับการใช้งาน
e-mail ที่ปลอมว่าส่งจากผู้มีอำนาจร้องขอให้ผู้ใช้ส่งสำเนาไฟล์รหัสผ่านหรือข้อมูลสำคัญอื่นๆ กลับมา
ผู้ใช้จึงควรระลึกไว้เสมอว่า เมื่อใดก็ตามที่ผู้ให้บริการ (เช่น บริการอินเทอร์เน็ต) ร้องขอให้ผู้ใช้เปลี่ยนแปลงรหัสผ่าน ผู้ให้บริการจะต้องไม่กำหนดว่ารหัสผ่านใหม่ของผู้ใช้ควรจะเป็นอะไร นอกจากนั้น ผู้ให้บริการที่ถูกกฎหมายจะไม่ขอให้ผู้ใช้ส่งข้อมูลรหัสผ่านไปให้ผู้บริการผ่านทาง e-mail ถ้าผู้ใช้คนใดสงสัยว่าตนเองได้รับ e-mail จากผู้ส่งที่มีเจตนาร้าย และ e-mail ดังกล่าวที่มีการ spoof ชื่อผู้ส่ง ขอให้ติดต่อไปยังผู้ให้บริการของท่านโดยทันที

9. E-mail ที่ส่งมาพร้อมกับไวรัส


ไวรัสและโค้ดโปรแกรมที่มีจุดประสงค์ในการทำลายระบบอื่นๆ มักจะแพร่กระจายผ่านการแนบไปกับ e-mail ดังนั้น ก่อนที่ผู้ใช้จะเปิดไฟล์แนบใดๆ ที่ส่งมากับ e-mail ผู้ใช้ควรจะแน่ใจก่อนว่าไฟล์นั้นมาจากที่ใด ซึ่งการทราบถึงแหล่งที่มาของไฟล์นั้น ไม่ได้หมายถึงการที่ผู้ใช้ทราบว่าใครเป็นผู้ส่ง e-mail มาให้ตนเองเท่านั้น ยกตัวอย่างกรณีของไวรัส Melissa (อ่านรายละเอียดได้จากส่วน แหล่งอ้างอิง) แพร่กระจายได้อย่างรวดเร็ว เนื่องจากถูกส่งจาก e-mail address ที่ผู้รับคุ้นเคย นอกจากนั้นโค้ดโปรแกรมที่มีจุดประสงค์ร้ายหลายอันอาจจะแพร่กระจายผ่านโปรแกรมที่ให้ความบันเทิงหรือโปรแกรมล่อลวงอื่นๆ


ผู้ใช้จึงไม่ควรเรียกใช้งานโปรแกรมใดๆ ถ้าหากไม่แน่ใจว่าถูกพัฒนาขึ้นโดยนักพัฒนาโปรแกรมหรือบริษัทที่เชื่อถือหรือไม่ และยังไม่ควรส่งโปรแกรมที่ตนเองไม่รู้ที่มาไปให้เพื่อนหรือเพื่อนร่วมงานโดยเด็ดขาด แม้ว่าโปรแกรมดังกล่าวจะเป็นโปรแกรมที่ให้ความสนุกสนานก็ตาม เพราะโปรแกรมลักษณะดังกล่าวมักจะมีโปรแกรม trojan แฝงมาด้วยเสมอ

10. ออปชัน "hide file extensions"


ในระบบปฏิบัติการวินโดวส์จะมีออปชันอย่างหนึ่งคือ "Hide file extensions for known file types" เป็นออปชันที่สั่งให้ระบบซ่อนนามสกุล 3 ตัวหลังสุด (extension) ของไฟล์ที่ระบบรู้จักไว้เพื่อให้สะดวกต่อการเรียกดูไฟล์บนหน้าจอ ซึ่งโดยปกติแล้วระบบจะตั้งค่าให้ออปชันนี้ทำงาน แต่ผู้ใช้สามารถยกเลิกการใช้งานออปชันนี้ได้เพื่อให้มีการแสดงนามสกุลของไฟล์ทั้งหมดบนหน้าจอ e-mail ที่ส่งมาพร้อมกับไวรัสหลายฉบับใช้ช่องโหว่ข้อนี้ในการโจมตี ตัวอย่างเช่น worm ชื่อ VBS/LoveLetter ที่ใช้การซ่อนนามสกุล 3 ตัวหลังสุดของไฟล์ที่ส่งมากับ e-mail ทำให้ไฟล์ที่ชื่อ "LOVE-LETTER-FOR-YOU.TXT.vbs" ปรากฏเพียง "LOVE-LETTER-FOR-YOU.TXT" ส่งผลให้ผู้ใช้เปิดดูไฟล์ดังกล่าวโดยไม่รู้ตัว โปรแกรมที่มีจุดประสงค์ในการบุกรุกระบบอีกหลายๆ โปรแกรมก็ใช้วิธีการทำนองเดียวกันนี้ด้วย เช่น

Downloader (MySis.avi.exe หรือ QuickFlick.mpg.exe)
VBS/Timofonica (TIMOFONICA.TXT.vbs)
VBS/CoolNote (COOL_NOTEPAD_DEMO.TXT.vbs)
VBS/OnTheFly (AnnaKournikova.jpg.vbs)
ไฟล์ดังกล่าวจะถูกแนบไปกับ e-mail ที่ไวรัสเหล่านี้ส่งออกไป ผู้ใช้จะพบว่าไฟล์ที่ได้รับอยู่ในรูปแบบของไฟล์ข้อความ (.txt) ไฟล์รูปภาพ (.mpg) ไฟล์วีดีโอ (.avi) หรือไฟล์ชนิดอื่นๆ ที่ผู้ใช้เห็นว่าไม่น่าจะทำอันตรายต่อระบบ แต่ในความเป็นจริง ไฟล์เหล่านั้นมีส่วนการทำงานหรือเป็นโปรแกรมที่สามารถทำลายระบบได้ (เช่น เป็นไฟล์ .vbs หรือ .exe) รายละเอียดเพิ่มเติมที่เกี่ยวข้องและไวรัสที่ทำงานโดยวิธีนี้ สามารถอ่านได้จากเอกสาร Computer Virus Resource


http://www.cert.org/other_sources/viruses.html

11. โปรแกรมสนทนา (chat)


โปรแกรมสนทนาทางอินเทอร์เน็ต เช่นโปรแกรมที่ใช้ส่งข้อความผ่านเครือข่ายและโปรแกรม Internet Relay Chat (IRC) เป็นแอพลิเคชันที่ทำหน้าที่ในการรับและส่งข้อมูลระหว่างเครื่องคอมพิวเตอร์สองเครื่องผ่นเครือข่ายอินเทอร์เน็ต โปรแกรมสนทนาที่ติดตั้งไว้ในเครื่องของผู้ใช้นั้นมีการจัดกลุ่มสำหรับผู้ใช้แต่ละคน เพื่อเป็นตัวกลางในการแลกเปลี่ยนข่าวสาร ข้อมูล บทสนทนา ชื่อเว็บไซต์ และในหลายๆ ครั้งยังรวมไปถึงการแลกเปลี่ยนไฟล์ชนิดต่างๆ ด้วย


ด้วยเหตุที่โปรแกรมสนทนาจำนวนมากอนุญาตให้ผู้ใช้แลกเปลี่ยนโปรแกรมที่จะนำไปใช้งาน ทำให้เกิดความเสี่ยงในลักษณะเดียวกับการส่ง e-mail แต่การใช้งานโปแกรมสนทนานี้ยังมีข้อจำกัดที่ความสามารถของโปรแกรมสนทนาในเครื่องในการสั่งให้ไฟล์ที่ได้รับมาทำงาน ดังนั้น ผู้ใช้จึงควรให้ความระมัดระวังในการแลกเปลี่ยนไฟล์กับกลุ่มคนที่ไม่รู้จัก

12. การดักจับ Packet


การดักจับ packet เป็นการทำงานโดยอาศัยโปรแกรมดักจับข้อมูลในการเก็บข้อมูลที่ถูกส่งไปมาในเครือข่าย ข้อมูลเหล่านี้อาจรวมไปถึงชื่อผู้ใช้ รหัสผ่าน และข้อมูลทางธุรกิจอื่นๆ ที่ถูกส่งในรูปที่ไม่มีการเข้ารหัส บางครั้งอาจทำให้ผู้ที่ทำการดักจับ packet ได้รับข้อมูลรหัสผ่านจากการกระทำนี้มากมาย ซึ่งผู้บุกรุกสามารถนำเอาค่ารหัสผ่านที่ได้นี้ไปใช้ในการบุกรุกระบบ ข้อสำคัญอีกอย่างหนึ่งก็คือ ผู้ที่จะติดตั้งโปรแกรมดักจับ packet ไม่จำเป็นต้องได้รับสิทธิ์เป็นผู้ดูแลระบบแต่อย่างใด


เมื่อเปรียบเทียบระหว่างการใช้งานผ่านสายชนิด DSL และการใช้งานแบบ dial-up ที่ใช้โดยทั่วไป ผู้ที่ใช้งานเคเบิลโมเด็มเป็นผู้ที่ได้รับความเสี่ยงสูงสุดต่อการถูกดักจับ packet เนื่องมาจากผู้ใช้งานเคเบิลโมเด็มที่อยู่ใกล้เคียงกันจะถูกเชื่อมต่อเข้าสู่เครือข่ายเสมือนหนึ่งอยู่ในวงเครือข่าย LAN เดียวกัน หากผู้ใช้คนใดคนหนึ่งของเครือข่ายเคเบิลโมเด็มติดตั้งโปรแกรมดักจับ packet ลงที่เครื่องคอมพิวเตอร์ของตนก็จะสามารถดักจับข้อมูลทั้งหมดที่ส่งเข้าออกจากเคเบิลโมเด็มอื่นๆ ที่อยู่ใกล้เคียงได้ทันที

C. อุบัติเหตุ และความเสี่ยงอื่นๆ


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


1. ดิสก์ขัดข้อง

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

2. กระแสไฟฟ้าขัดข้องหรือไม่สม่ำเสมอ


ปัญหาจากกระแสไฟฟ้าที่เครื่องคอมพิวเตอร์ใช้งาน (เช่น ไฟกระชาก ไฟตก เป็นต้น) เป็นสาเหตุให้เครื่องคอมพิวเตอร์เสียหาย ทั้งยังทำให้ฮาร์ดดสก์ขัดข้องหรือเป็นอันตรายต่อชิ้นส่วนอิเล็กทรอนิกส์อื่นๆ ภายในเครื่องคอมพิวเตอร์ แนวทางในการลดความเสี่ยงข้อนี้คือการนำเอาเครื่องป้องกันไฟกระชากหรือเครื่องจ่ายกระแสไฟฟ้าสำรอง (UPS) มาใช้งาน

3. การถูกโจรกรรม


การถูกโจรกรรมเครื่องคอมพิวเตอร์ ถือเป็นวิธีการที่ทำให้สูญเสียความปลอดภัยของข้อมูล ทั้งในข้อความลับและความพร้อมใช้ ทั้งยังทำให้ผู้ใช้เกิดความไม่แน่ใจว่าความสมบูรณ์ของข้อมูลดังกล่าวจะยังคงเดิมหรือไม่ (ในกรณีที่ผู้ใช้สามารถกู้คืนข้อมูลมาได้) การมีระบบสำรองข้อมูล (ที่เก็บข้อมูลสำรองไว้ในสถานที่อื่น) เป็นวิธีการที่ทำให้ผู้ใช้กู้คืนข้อมูลทั้งหมดกลับมาได้ แต่การมีระบบสำรองข้อมูลเพียงอย่างเดียวไม่ช่วยรักษาความลับของข้อมูล ผู้ใช้จำเป็นจะต้องนำเครื่องมือที่ช่วยในการเข้ารหัสมาใช้เข้ารหัสข้อมูลซึ่งเก็บไว้ในฮาร์ดดิสก์ของเครื่องคอมพิวเตอร์ CERT/CC แนะนำให้ผู้ใช้งานเครื่องคอมพิวเตอร์ที่มีข้อมูลสำคัญหรือมีความเสี่ยงที่จะถูกโจรกรรม (เช่น เครื่องคอมพิวเตอร์พกพาแบบต่างๆ) นำเครื่องมือเหล่านี้มาติดตั้งไว้ใช้งานในเครื่อง

2009-03-02

เทคโนโลยี

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


A. "Broadband" คืออะไร


"Broadband" เป็นคำศัพท์เฉพาะที่ใช้ทั่วไปในการกล่าวถึงการติดต่อผ่านเครือข่ายความเร็วสูง ในที่นี้จะหมายถึงการติดต่ออินเทอร์เน็ตผ่านทางเคเบิลโมเด็มและสายชนิด Digital Subscriber Line (DSL) ซึ่งนิยมเรียกว่าการติดต่ออินเทอร์เน็ตแบบ broadband โดยมีค่า "Bandwidth" จะเป็นค่าที่อธิบายถึงความเร็วสัมพัทธ์ในการติดต่อกับเครือข่าย เช่น การติดต่อผ่านโมเด็มโดยการ dial-up ที่ใช้งานทั่วไปในปัจจุบันทำงานมีค่า bandwidth 56 กิโลบิตต่อวินาที (kbps (103)) ไม่มีการกำหนดค่าที่แน่นอนไว้ว่า การติดต่อแบบ broadband จะต้องมีค่า bandwidth เท่าใด แต่โดยทั่วไปแล้วจะใช้ค่าประมาณ 1 เมกกะบิตต่อวินาที (Mbps (106)) ขึ้นไป

B. การเข้าถึงผ่านเคเบิลโมเด็มคืออะไร


เคเบิลโมเด็มเป็นการติดต่อที่ให้เครื่องคอมพิวเตอร์แต่ละเครื่อง (หรือแต่ละเครือข่ายคอมพิวเตอร์) ติดต่อเข้าสู่อินเทอร์เน็ตผ่านทางเครื่องข่ายเคเบิลของโทรทัศน์ การทำงานของเคเบิลโมเด็มมีลักษณะคล้ายกับเครือข่าย Ethernet LAN (Local Area Network) และมีความเร็วในการทำงานสูงสุดถึง 5 Mbps


แต่ความเร็วขณะที่ใช้งานจริงมักจะได้ค่าที่น้อยกว่าค่าสูงสุดนี้ เนื่องมาจากสายเคเบิลที่ใช้งานถูกลากผ่านบริเวณใกล้เคียงเกิดเป็นเครือข่าย LANs ซึ่งทำการแบ่งการใช้งาน bandwidth ที่ได้ทั้งหมดของสาย ด้วยสาเหตุของรูปแบบการเชื่อมต่อที่ "แบ่งใช้งานตัวกลางการติดต่อ" ผู้ใช้งานเคเบิลโมเด็มบางรายจึงประสบปัญหาว่า ในบางครั้งการเข้าถึงเครือข่ายทำได้ช้ามาก โดยเฉพาะในช่วงเวลาที่มีผู้ใช้งานจำนวนมาก นอกจากนี้ เคเบิลโมเด็มยังมีจุดอ่อนด้านความเสี่ยงต่อการถูกดักจับ packet และอันตรายจากการแชร์ทรัพยากรบนระบบปฏิบัติการวินโดวส์มากกว่าการติดต่อด้วยวิธีอื่นๆ (อ่านรายละเอียดได้จากหัวข้อ "ความเสี่ยงด้านความปลอดภัยคอมพิวเตอร์ต่อผู้ใช้งานเครื่องคอมพิวเตอร์ที่บ้าน" ของเอกสารฉบับนี้)

C. การเข้าถึงผ่านสายชนิด DSL คืออะไร


การติดต่ออินเทอร์เน็ตแบบ Digital Subscriber Line (DSL) แตกต่างจากการติดต่อแบบเคเบิลโมเด็ม โดยผู้ใช้แต่ละคนที่เชื่อมต่อกับเครือข่ายจะได้รับ bandwidth คงที่ อย่างไรก็ตามค่า bandwidth สูงสุดที่ผู้ใช้ได้รับจากการใช้งานสายชนิด DSL ต่ำกว่าค่า bandwidth สูงสุดที่ผู้ใช้ได้รับจากการใช้งานสายเคเบิลโมเด็ม เนื่องจากเทคโนโลยีที่นำมาใช้ต่างกัน นอกจากนั้น ค่า bandwidth ที่ผู้ใช้แต่ละคนได้รับเป็นค่าการใช้งานระหว่างเครื่องคอมพิวเตอร์ที่บ้านกับศูนย์ของผู้ให้บริการ DSL เท่านั้น ผู้ให้บริการจะไม่ให้การรับรองหรืออาจจะให้การรับรองน้อยมากสำหรับ bandwidth ที่ใช้ในการติดต่อออกไปยังอินเทอร์เน็ต


การเชื่อมต่อแบบ DSL ไม่มีจุดอ่อนต่อการถูกดักจับ packet เหมือนกับการใช้งานเคเบิลโมเด็ม แต่ความเสี่ยงด้านความปลอดภัยอื่นๆ ยังคงมีผลต่อทั้งการติดต่อแบบ DSL และเคเบิลโมเด็ม (อ่านรายละเอียดได้จากหัวข้อ "ความเสี่ยงด้านความปลอดภัยคอมพิวเตอร์ต่อผู้ใช้งานเครื่องคอมพิวเตอร์ที่บ้าน" ของเอกสารฉบับนี้)

D. การให้บริการแบบ broadband แตกต่างจากการให้บริการแบบ dial-up ที่ใช้งานโดยทั่วไปอย่างไร


การให้บริการแบบ dial-up ที่ใช้งานโดยทั่วไปอาจเรียกได้ว่าเป็นการให้บริการแบบ "ติดต่อเมื่อต้องการใช้งาน" นั่นคือ เครื่องคอมพิวเตอร์จะติดต่อเข้าสู่อินเทอร์เน็ตเมื่อต้องการจะส่งข้อมูล เช่น e-mail หรือต้องการดาวน์โหลดเว็บเพจ หลังจากไม่มีข้อมูลที่ต้องการส่ง หรือหลังจากไม่มีการส่งข้อมูลเป็นระยะเวลาหนึ่ง เครื่องคอมพิวเตอร์จะตัดการติดต่อ นอกจากนี้ การติดต่อแต่ละครั้งโดยทั่วไปจะเป็นการขอเข้าใช้งานเครื่องรับโมเด็ม 1 เครื่องจากผู้ให้บริการอินเทอร์เน็ต ซึ่งเครื่องรับโมเด็มแต่ละเครื่องจะมี IP address ที่แตกต่างกัน เครื่องคอมพิวเตอร์ของผู้ใช้จะรับเอา IP address นั้นมาใช้งาน ทำให้แต่ละเครื่องมี IP address ต่างกันออกไป วิธีการดังกล่าวนี้ทำให้เป็นการยาก (แต่ยังมีความเป็นไปได้) ที่ผู้บุกรุกจะตรวจหาช่องโหว่ในเครื่องคอมพิวเตอร์ของผู้ใช้ แล้วนำไปใช้เพื่อลักลอบเข้าไปควบคุมเครื่อง


การให้บริการแบบ broadband อาจเรียกได้ว่าเป็นการให้บริการแบบ "ติดต่อตลอดเวลา" เนื่องจากเมื่อเครื่องคอมพิวเตอร์ต้องการส่งข้อมูลแต่ละครั้ง ไม่จำเป็นจะต้องเริ่มต้นการติดต่อใหม่ คอมพิวเตอร์จะติดต่อกับเครือข่ายตลอดเวลา และพร้อมที่จะรับส่งข้อมูลผ่านทาง Network Interface Card (NIC) ผลจากการที่เครื่องคอมพิวเตอร์ติดต่อกับเครือข่ายตลอดเวลา ทำให้ IP address ที่ใช้มีการเปลี่ยนแปลงน้อยมาก (หรือไม่เปลี่ยนแปลงเลย) ทำให้เครื่องคอมพิวเตอร์ตกเป็นเป้าหมายในการโจมตี


สาเหตุอีกข้อหนึ่งก็คือ ผู้ให้บริการเครือข่ายแบบ broadband นิยมแจก IP address ที่เป็นที่รู้จักให้แก่ผู้ใช้งาน ดังนั้น แม้ว่าผู้บุกรุกเครือข่ายจะไม่สามารถเจาะจงได้ว่า IP address ใดเป็นของเครื่องคอมพิวเตอร์ที่ใครใช้งาน แต่ผู้บุกรุกก็สามารถทราบได้ว่าลูกค้าซึ่งใช้บริการเครือข่ายแบบ broadband ของผู้ให้บริการแต่ละรายได้รับ IP address อยู่ในช่วงใด ทำให้เครื่องคอมพิวเตอร์ของผู้ที่ใช้บริการแบบนี้ตกเป็นเป้าหมายในการบุกรุกได้มากกว่าแบบอื่นๆ

ตารางที่ 1 แสดงการเปรียบเทียบความแตกต่างระหว่างการติดต่อแบบ dial-up ที่ใช้งานทั่วไปกับบริการแบบbroadband


แบบ dial-up แบบ broadband
ชนิดการติดต่อ ติดต่อเมื่อต้องการใช้งาน ติดต่อตลอดเวลา
IP address ที่ใช้งาน เปลี่ยนแปลงทุกครั้งที่ติดต่อ เหมือนเดิม / เปลี่ยนแปลงไม่บ่อย
ความเร็วในการเชื่อมต่อเมื่อเปรียบเทียบกัน ต่ำกว่า สูงกว่า
ความสามารถในการควบคุมจากระยะไกล คอมพิวเตอร์จะต้องติดต่อเข้าสู่ระบบเพื่อทำการควบคุม คอมพิวเตอร์ติดต่อกับระบบตลอด จึงทำการควบคุมได้ตลอดเวลา
ระดับความปลอดภัยที่ทางผู้บริการจัดเตรียมให้ น้อยมาก / ไม่มีเลย น้อยมาก / ไม่มีเลย

E. การเข้าถึงแบบ broadband แตกต่างจากเครือข่ายที่ใช้ในที่ทำงานอย่างไร


เครือข่ายขององค์กรและภาครัฐบาลโดยทั่วไปจะได้รับการป้องกันความปลอดภัยในหลายระดับ เริ่มตั้งแต่การใช้งานไฟร์วอลล์ สำหรับเครือข่ายไปจนถึงการเข้ารหัสข้อมูล นอกจากนั้น ผู้ใช้งานยังมีทีมงานที่ทำหน้าที่รับผิดชอบดูแลและแก้ไขความปลอดภัยของระบบ และจัดการให้เครือข่ายติดต่อใช้งานได้ตลอดเวลา


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

F. โพรโตคอล (Protocol) คืออะไร


โพรโตคอล (Protocol) เป็นข้อกำหนดถึงรูปแบบที่จะใช้งานในการติดต่อระหว่างเครื่องคอมพิวเตอร์ที่ส่งไปมาในเครือข่าย หรืออีกนัยหนึ่งโพรโตคอลเป็นตัวกำหนด "ไวยากรณ์ (รูปประโยค)" ที่เครื่องคอมพิวเตอร์ใช้ในการพูดคุยกัน

G. IP คืออะไร


IP ย่อมาจาก "Internet Protocol" เปรียบเทียบได้กับภาษากลางที่เครื่องคอมพิวเตอร์ทั่วไปใช้บนอินเทอร์เน็ต มีผู้ได้ให้คำอธิบายโดยละเอียดของ IP ไว้มากมาย ซึ่งจะไม่นำมากล่าวถึงรายละเอียดในที่นี้ อย่างไรก็ตาม ผู้ใช้ควรรู้เกี่ยวกับ IP สักเล็กน้อย เพื่อที่จะสามารถทำความเข้าใจต่อได้ถึงวิธีการในการสร้างความปลอดภัยให้กับเครื่องคอมพิวเตอร์ ได้แก่ เรื่อง IP address, address แบบ static และแบบ dynamic, NAT และพอร์ทชนิด TCP และ UPD


รายละเอียดโดยภาพรวมของ TCP/IP สามารถอ่านได้จากเอกสาร TCP/IP Frequently Asked Questions (FAQ) ที่นี่


http://www.faqs.org/faqs/internet/tcp-ip/tcp-ip-faq/part1/

และ

http://www.faqs.org/faqs/internet/tcp-ip/tcp-ip-faq/part2/

H. IP address คืออะไร


IP address มีลักษณะคล้ายคลึงกับหมายเลขโทรศัพท์ เมื่อผู้ใช้โทรศัพท์ต้องการจะโทรหาใคร สิ่งแรกที่จะต้องทราบคือเบอร์โทรศัพท์ของเขาคือเบอร์อะไร เช่นเดียวกัน เมื่อเครื่องคอมพิวเตอร์เครื่องใดบนอินเทอร์เน็ตต้องการส่งข้อมูลไปยังเครื่องคอมพิวเตอร์เครื่องอื่นๆ คอมพิวเตอร์เครื่องนั้นก็จำเป็นจะต้องทราบว่า IP address ของเครื่องดังกล่าวคืออะไร โดยทั่วไปแล้ว IP address จะถูกแสดงด้วยตัวเลข 4 จำนวนคั่นระหว่างกันด้วยจุด (.) เช่น 10.24.254.3 และ 192.168.62.231 เป็นต้น


ในระบบโทรศัพท์ หากผู้ใช้ต้องการติดต่อหาใครแต่ทราบเฉพาะชื่อของคนๆ นั้น ผู้ใช้สามารถค้นหาเบอร์โทรศัพท์ได้จากสมุดโทรศัพท์ (หรือบริการสอบถามหมายเลขโทรศัพท์) สำหรับระบบอินเทอร์เน็ตนั้น การค้นหารายการผู้ใช้จะผ่านบริการที่เรียกว่า Domain Name Service หรือที่เรียกสั้นๆ ว่า DNS ถ้าหากผู้ใช้ทราบชื่อเครื่องให้บริการ เช่น www.cert.org และพิมพ์ชื่อนี้ลงในเว็บบราวเซอร์ เครื่องคอมพิวเตอร์ไปสอบถามเครื่องให้บริการ DNS ว่าตัวเลข IP address ที่เกี่ยวข้องกับชื่อนี้คืออะไร


เครื่องคอมพิวเตอร์ทุกเครื่องบนเครือข่ายอินเทอร์เน็ตมี IP address ไว้ใช้งานซึ่งค่าดัวกล่าวนี้เป็นค่าเฉพาะที่ใช้ในการบอกว่าเป็นเครื่องคอมพิวเตอร์เครื่องไหน อย่างไรก็ตาม ค่า address นี้สามารถเปลี่ยนแปลงได้ในระยะเวลาหนึ่ง ถ้าเครื่องคอมพิวเตอร์มีการใช้งานดังนี้

การติดต่อผ่านการ dial เข้าไปยังผู้ให้บริการอินเทอร์เน็ต
เชื่อมต่ออยู่ด้านหลังไฟร์วอลล์
ติดต่อไปยังบริการแบบ broadband โดยใช้ IP address แบบ dynamic
I. Address แบบ static และแบบ dynamic แตกต่างกันอย่างไร


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


IP address แบบ dynamic เป็นวิธีที่ทำให้ผู้ให้บริการอินเทอร์เน็ตใช้ประโยชน์จาก IP address ที่มีได้ประสิทธิภาพสูงสุด เนื่องจากระบบ IP address แบบ dynamic นี้จะทำให้ IP address ของเครื่องคอมพิวเตอร์ของผู้ใช้แต่ละคนเปลี่ยนแปลงไปตามระยะเวลา ถ้าหาก address ใดไม่ถูกใช้งานก็จะสามารถนำไปแจกต่อให้กับเครื่องคอมพิวเตอร์เครื่องอื่นที่ต้องการใช้งานต่อไปได้

J. NAT คืออะไร


Network Address Translation (NAT) เป็นวิธีการที่ใช้ในการซ่อน IP address ของเครื่องคอมพิวเตอร์ที่ใช้งานในเครือข่ายส่วนตัว (private network) ไม่ให้มองเห็นได้จากอินเทอร์เน็ต โดยที่เครื่องภายในเครือข่ายส่วนตัวเหล่านั้นยังคงเชื่อมต่อกับเครือข่ายและสามารถใช้งานอินเทอร์เน็ตได้ ผู้ใช้สามารถนำเอา NAT ไปใช้งานได้หลายรูปแบบ ซึ่งวิธีการหนึ่งที่นิยมนำไปใช้กับเครือข่ายที่ใช้งานที่บ้านเรียกว่า การทำ "masquerading"


การทำ NAT แบบ masquerading ทำให้อุปกรณ์ทั้งหมดที่ใช้งานในเครือข่าย (เช่น เครื่องคอมพิวเตอร์) ตั้งแต่ 1 เครื่องขึ้นไปจนถึงหลายๆ เครื่องในวง LAN สามารถใช้งานอินเทอร์เน็ตได้โดยมีหมายเลข IP address เพียงอันเดียว ส่งผลให้เครื่องคอมพิวเตอร์หลายๆ เครื่องที่ใช้งานในเครือข่ายที่บ้านสามารถใช้งานการติดต่อผ่านเคเบิลโมเด็มหรือสายชนิด DSL โดยอาศัยการเชื่อมต่อเพียงครั้งเดียว และใช้หมายเลข IP address เดียว ทำให้ผู้ใช้ไม่จำเป็นต้องขอ IP address เพิ่มเติมจากผู้ให้บริการอินเทอร์เน็ต นอกจากนี้ ยังทำให้ผู้ให้บริการอินเทอร์เน็ตสามารถแจก IP address ให้แก่ผู้ต้องการใช้งานได้ทั้งแบบ static และแบบ dynamic โดยไม่ต้องคำนึงถึงจำนวน IP address ที่จำเป็นต้องแจกให้กับผู้ใช้แต่ละคนไฟร์วอลล์ แบบเครือข่ายจำนวนมากรองรับการทำงานของ NAT แบบ masquerading ได้

K. พอร์ทชนิด TCP และ UDP คืออะไร


TCP ย่อมาจาก Transmission Control Protocol และ UDP ย่อมาจาก User Datagram Protocol ซึ่งทั้ง TCP และ UDP เป็นโพรโตคอลที่ทำงานโดยอาศัย IP ในขณะที่ IP เป็นตัวจัดการให้เครื่องคอมพิวเตอร์ 2 เครื่องสามารถติดต่อสื่อสารกันไปมาผ่านเครือข่ายอินเทอร์เน็ต TCP และ UDP ทำหน้าที่ในการอนุญาตให้แอพลิเคชันแต่ละชนิด (หรือที่นิยมเรียกว่า "บริการ") ของเครื่องคอมพิวเตอร์แต่ละเครื่องสามารถติดต่อกันได้


การติดต่อระหว่างเครื่องคอมพิวเตอร์ก็มีลักษณะคล้ายคลึงกับระบบของหมายเลขโทรศัพท์หรือตู้จดหมาย ที่จะต้องติดต่อกับบุคคลอื่นมากกว่า 1 คน สำหรับเครื่องคอมพิวเตอร์นั้นก็มีแอพลิเคชันที่ใช้งานมากมาย (เช่น e-mail การให้บริการไฟล์ การให้บริการเว็บเพจ) ใช้งานการติดต่อที่ IP address เดียวกัน พอร์ทของเครื่องคอมพิวเตอร์จะทำหน้าที่แบ่งแยกความแตกต่างของบริการที่ใช้ออกจากกัน เช่น แยกข้อมูล e-amil ออกจากข้อมูลเว็บเพจ โดยแต่ละพอร์ทจะแทนด้วยหมายเลขที่เกี่ยวข้องกับแอพลิเคชันที่ใช้งาน และเป็นค่าเฉพาะใช้บ่งชี้ถึงแต่ละบริการบนเครื่องคอมพิวเตอร์ การทำงานของ TCP และ UDP จะใช้หมายเลขพอร์ทเพื่อแบ่งแยกบริการแต่ละอัน หมายเลขพอร์ทที่มักจะพบเห็นในการใช้งานทั่วไป ได้แก่ พอร์ท 80 ใช้สำหรับเว็บ (HTTP) พอร์ท 25 ใช้สำหรับ e-mail (SMTP) และพอร์ท 53 ใช้สำหรับการให้บริการชื่อโดเมน (DNS)

L. ไฟร์วอลล์ (firewall) คืออะไร


ในเอกสารเรื่องคำถามคำตอบที่พบบ่อยเกี่ยวกับไฟร์วอลล์ (http://www.faqs.orgs/faqs/firewalls-faq/) ได้ให้นิยามไว้ว่า ไฟร์วอลล์ คือ "ระบบหรือกลุ่มของระบบคอมพิวเตอร์ ซึ่งทำหน้าที่บังคับใช้นโยบายการควบคุมการเข้าถึงระบบระหว่างเครือข่าย 2 เครือข่ายใดๆ" เมื่อพิจารณาในส่วนการนำไปใช้งานกับเครือข่ายที่บ้าน ไฟร์วอลล์ที่จะนำไปใช้งานจะมีรูปแบบการทำงานตามลักษณะใด ลักษณะหนึ่ง ต่อไปนี้

ไฟร์วอลล์ชนิดซอฟต์แวร์ หมายความถึงซอฟต์แวร์ที่ทำงานกับเครื่องคอมพิวเตอร์เครื่องใดเครื่องหนึ่งที่กำหนดโดยเฉพาะ
ไฟร์วอลล์ชนิดเครือข่าย เป็นการนำเอาเครื่องคอมพิวเตอร์หรืออุปกรณ์คอมพิวเตอร์มาใช้ในการป้องกันเครื่องคอมพิวเตอร์ตั้งแต่หนึ่งเครื่องขึ้นไป จนถึงหลายๆ เครื่อง

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


หากต้องการศึกษาเพิ่มเติมเกี่ยวกับไฟร์วอลล์สามารถหาข้อมูลได้จากส่วนข้อมูลเพิ่มเติมของเอกสารฉบับนี้

M. ซอฟต์แวร์ anti-virus มีการทำงานอย่างไร


ผลิตภัณฑ์ที่เกี่ยวข้องกับซอฟต์แวร์ anti-virus มีหลายรูปแบบ แต่ละแบบมีวิธีการทำงานที่แตกต่างกันไปขึ้นกับผู้ผลิตว่าจะให้ซอฟต์แวร์ของตนเป็นอย่างไร ส่วนที่ซอฟต์แวร์เหล่านี้ทำงานเหมือนกันคือ การตรวจหารูปแบบภายในไฟล์หรือหน่วยความจำของเครื่องคอมพิวเตอร์ของผู้ใช้เพื่อบ่งชี้ว่า มีส่วนใดที่อาจจะมีไวรัสแฝงตัวอยู่ ผลิตภัณฑ์ anti-virus เหล่านี้จะมีการเก็บข้อมูลประวัติของไวรัสแต่ละตัวไว้ (บางครั้งเรียกว่า "signatures") เพื่อใช้เป็นต้นแบบในการค้นหา ซึ่งผู้ผลิตซอฟต์แวร์จะเป็นผู้ทำการรวบรวมและจัดเตรียมข้อมูลประวัติของไวรัส


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


ข้อมูลเพิ่มเติมเกี่ยวกับไวรัสและซอฟต์แวร์ anti-virus สามารถอ่านได้ที่หน้า CERT Computer Virus Resource


http://www.cert.org/other_sources/viruses.html

ความปลอดภัยคอมพิวเตอร์

A. ความปลอดภัยคอมพิวเตอร์คืออะไร

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

B. ทำไมจึงต้องให้ความสนใจต่อความปลอดภัยคอมพิวเตอร์

ในทุกวันนี้ คอมพิวเตอร์ถูกใช้งานเพื่อการทำธุรกรรมต่างๆ ทั้งด้านการเงินการลงทุน รวมไปถึงการใช้เพื่อติดต่อสื่อสารไปยังบุคคลอื่นผ่าน e-mail และโปรแกรมสนทนาต่างๆ ถึงแม้ว่าผู้ใช้งานอาจจะไม่คิดว่า การติดต่อสื่อสารทั้งหมดนี้ถือเป็นข้อมูลที่ "ลับที่สุด" แต่ผู้ใช้ก็คงไม่อยากให้ผู้ที่ไม่เกี่ยวข้องอ่าน e-mail ของตน นำเครื่องคอมพิวเตอร์ของตนไปใช้ในการบุกรุกระบบอื่นๆ ต่อ ส่ง e-mail จากเครื่องของตน หรือเข้ามาอ่านข้อมูลส่วนตัวที่อยู่ในเครื่อง (เช่น เอกสารทางการเงิน)

C. ใครต้องการบุกรุกเครื่องคอมพิวเตอร์ที่ใช้งานที่บ้าน

ผู้บุกรุก (ซึ่งอาจจะหมายความถึง hacker, attacker และ cracker) อาจจะไม่สนใจว่าเจ้าของเครื่องเป็นใคร บ่อยครั้งที่คนเหล่านั้นต้องการเข้ามาควบคุมเครื่องคอมพิวเตอร์เพื่อที่จะนำไปใช้ในการบุกรุกระบบอื่นๆ อีกต่อหนึ่ง


การได้รับสิทธิ์ในการควบคุมเครื่องคอมพิวเตอร์จะทำให้ผู้บุกรุกสามารถปกปิดตัวตนและแหล่งที่อยู่จริงที่ใช้ในการโจมตีได้ มักนำไปใช้ในการโจมตีระบบที่มีการเก็บข้อมูลผู้บุกรุกอย่างละเอียด เช่น ระบบของรัฐบาล หรือระบบของสถาบันการเงิน ถึงแม้ว่าผู้ใช้บางคนอาจจะเชื่อมต่อเครื่องของตนเข้าสู่เครือข่ายอินเทอร์เน็ตเพียงเพื่อเล่นเกมส์ หรือส่ง e-mail ไปหาเพื่อนและครอบครัวก็ตาม เครื่องคอมพิวเตอร์เครื่องนั้นก็อาจตกเป็นเป้าหมายในการโจมตีของผู้บุกรุกได้


ผู้บุกรุกสามารถเข้ามาดูว่าผู้ใช้งานกำลังทำอะไรอยู่ หรืออาจจะสร้างความเสียหายหรือทำลายคอมพิวเตอร์ที่บุกรุกได้โดยการ format ฮาร์ดดิสก์หรือแก้ไขข้อมูลที่อยู่ในเครื่อง

D. การบุกรุกเข้ามาใช้งานเครื่องคอมพิวเตอร์ที่บ้านเป็นเรื่องง่ายมาก จริงหรือไม่


เป็นความโชคร้ายของผู้ใช้งาน เนื่องจากผู้บุกรุกมักจะค้นพบช่องโหว่ใหม่ๆ ของซอฟต์แวร์ในเครื่องคอมพิวเตอร์ได้ตลอดเวลา โดยที่ผู้ใช้ไม่สามารถทดสอบความปลอดภัยให้ครอบคลุมระบบทั้งหมดได้เลย เพราะซอฟต์แวร์เหล่านั้นมีความซับซ้อนมาก


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


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