System logging via syslog

การบันทึกการติดต่อ (logging) สำคัญมากเพราะมันจะให้ข้อมูลเกี่ยวกับร่องรอยการถูกโจมตี การพยายามบุกรุกหรือระบบของคุณถูกบุกรุกแล้วก็ตาม ยูนิกซ์โดยทั่วไปจะทำโดย syslog daemon daemon นี้จะเริ่มทำงานตอนบูตระบบจาก /etc/rc แล้วจึงทำงานต่อไปจนกระทั่งปิดระบบของคุณ ตรวจดูว่า syslogd ทำงานอยู่หรือไม่ด้วยคำสั่ง:

% ps -axu | grep syslogd

syslog daemon จะอ่าน configuration จาก /etc/syslog.conf เมื่อเริ่มต้นทำงาน ไฟล์นี้มีความสำคัญมากเนื่องจากมันบอก syslog อะไรที่จะให้บันทึกและบันทึกไว้ที่ไหน คุณสามารถอ่าน man page ของ syslogd และ syslog.conf ดังนี้:

% man syslogd syslog.conf

เนื่องจากยูนิกซ์ออกแบบมาเพื่อการทำงานด้านเน็ตเวิร์ค ดังนั้นค่าเริ่มต้น syslog daemon จึงสามารถรับ syslog datagram จากระบบอื่นและส่ง datagram ไปยังระบบอื่นในเน็ตเวิร์คได้ syslod daemon ใช้ UDP - datagram ซึ่งปลอมแปลงข้อมูลได้ง่ายกว่า TCP มาก ดังนั้นจึง ควรเซ็ต syslog daemon ไม่ให้รับ syslog message จากระบบอื่น โดยการรัน syslog daemon ในโหมดที่ปลอดภัย โดยการเพิ่ม "-s" ลงไปใน /etc/rc.conf

ถ้าคุณจำเป็นต้องให้ระบบของคุณรับ syslog datagram จาก device อีกอย่างหนึ่ง (เช่น router หรือ web server ของตัวเอง) ใช้ "-a" เพื่อให้ยอมรับจากโฮสต์ หรือโดเมน หรือโดเมนย่อยที่ต้องการ ต่อไป เมื่อรีบูตระบบ syslogd ระบบรันด้วย "-s" เมื่อมีผู้ส่ง datagram มา syslogd โดยผ่านเน็ตเวิร์ค คุณ จะเห็นข้อความใน log ของคุณดังต่อไปนี้:

Jul 21 10:52:35 nfr syslogd: discarded 1 unwanted packets in secure mode

Jul 21 10:52:35 nfr syslogd: discarded 2 unwanted packets in secure mode

Jul 21 10:52:35 nfr syslogd: discarded 4 unwanted packets in secure mode

ถ้าไม่ต้องการรีบูตใหม่เพียงแต่ kill -9 syslog daemon แล้วรัน syslogd ใหม่ด้วยสิทธิ์ของ root ด้วย "-s" มันจะทำงานได้ดีถ้าการโจมตีระบบของคุณล้มเหลวและ syslog ไม่ถูกแก้ไข แต่ถ้าผู้โจมตี สามารถบุกรุกเข้ามาได้และลบไฟล์ใน /var/log มีหลายวิธีที่จะป้องกันได้ วิธีหนึ่งคือให้เซ็ตคอมพิวเตอร์ เครื่องหนึ่งซึ่งรัน syslog สำหรับเน็ตเวิร์คทั้งหมดและไม่ต้องให้รันเซอร์วิสอื่น ๆ อีก ไม่มีพอร์ตอื่นที่เปิด นอกจาก UDP พอร์ต 514 (พอร์ตของ syslogd) ด้วยวิธีนี้คุณสามารถทำให้ระบบของคุณทั้งหมด (routers, firewalls, server, workstation) ส่งข้อมูลที่สำคัญ(หรือที่คุณเลือกไว้)มาที่เครื่องนี้ ซึ่งอาจเป็น เครื่อง 486 เก่า ๆ ที่มีเนื้อที่ hardisk เหลือมากหน่อย ต้องมั่นใจว่าได้เซ็ต option ที่ถูกต้องแก่ "-a" ถ้าคุณ จะให้ระบบนี้ใช้ syslogd อย่างเดียว นอกจากนี้คุณสามารถต่อพรินเตอร์เข้ากับระบบของคุณและให้ syslog ส่งข้อมูล(เช่นการ log in ไม่สำเร็จ)เข้าไปพิมพ์ที่พรินเตอร์ ถ้าข้อมูลพิมพ์บนกระดาษแล้วก็ยากที่ผู้โจมตีจะลบ log ได้ (ถ้าไม่ทำงานอยู่ที่เดียวกัน) อีกทางเลือกคือให้ส่งข้อความจาก syslogd ทั้งหมดไปยังคอมพิวเตอร์ อีกเครื่องหนึ่งที่ติดต่อกันด้วย serial (cuaaN) หรือ parallel (lpN) พอร์ตเคเบิล

ถึงแม้แต่ละคนมีเหตุผลในการบันทึก syslog ต่างกัน แต่สิ่งหนึ่งที่ควรทำคือ เพิ่มบรรทัดนี้ลงไปใน /etc/syslog.conf ดังนี้:

auth.*,authpriv.* /var/log/authlog

FreeBSD มีโปรแกรม newsyslog ซึ่งจะเปลี่ยนไฟล์ log ให้เพื่อ log จะได้ไม่ใหญ่จนเกินไป configuration ไฟล์ของโปรแกรมนี้คือ /etc/newsyslog.conf ดู man page เพื่อดูข้อมูลเกี่ยวกับ newsyslog

% man newsyslog

โปรแกรมนี้ไม่เหมือน syslogd มันจะรันจาก crontab:

% grep newsyslog /etc/crontab

0 * * * * root /usr/sbin/newsyslog

คุณควรแก้ไข /etc/newsyslog.conf ให้เหมาะสมกับความต้องการของคุณ

ควรเปลี่ยน permission จาก 664 เป็น 640 เนื่องจากยูสเซอร์ธรรมดาไม่มีความจำเป็นที่จะต้องอ่าน log ของคุณ:

# cd /var/log

# chmod g-w,o-r * ; chmod a+r wtmp

ด้วยวิธีข้างต้นจะต้องกันไม่ให้ยูสเซอร์ธรรมไม่ให้อ่านไฟล์ log ของคุณได้ถ้าเขาไม่ได้อยู่ใน group ที่เหมาะสม (อย่างเช่น group wheel หรืออื่น ๆ) คุณควรเปลี่ยนไฟล์ log ทั้งหมดให้อยู่ใน group wheel เพื่อความสะดวก คุณสามารถ su เพื่อเป็น root และอ่าน log ไฟล์ได้ คุณสามารถเพิ่ม "root.wheel" ลงไปใน /etc/newsyslog.conf ดังนี้:

/var/log/maillog root.wheel 640 7 100 * Z

/var/log/authlog root.wheel 640 7 100 * Z

/var/log/messages root.wheel 640 7 100 * Z

เมื่อไฟล์เหล่านี้มีขนาด 100 kilobyte มันจะ zip ไฟล์เหล่านี้เก็บไว้ เปลี่ยนเป็น 640 แล้ว chown เป็น root.wheel ตามที่เราต้องการ

มีโปรแกรมที่เป็นทางเลือกอื่น ๆ นอกจาก syslog ที่มีกับยูนิกซ์โดยทั่วไป คือ:

* ssyslog (secure syslog จาก Core SDI (http://www.core-sdi.com/Core-SDI/english/slogging/ssyslog.html)

* nsyslog (new syslog จากผู้ที่สร้าง ipfileter (http://cheops.anu.edu.au/~avalon/nsyslog.html)

ไม่ว่าคุณใช้โปรแกรมใดข้างต้นก็ตาม (syslog, ssylog, หรือ nsyslog) คุณควรใช้ utility อื่น ๆที่จะช่วย วิเคราะห์ไฟล์ log ของคุณ เพื่อจะได้ไม่ต้องมีปัญหากับคำสั่ง grep

* logcheck หาได้จาก http://www.psionic.com/abacus/abacus_logcheck.html

* logsurfer หาได้จาก http://www.cert.dfn.de/eng/team/wl/logsurf

Miscellaneous hints and tips

LKM

คุณจำเป็นที่จะต้องปิดการใช้งานโปรแกรม LKM ในระบบ ดูรายละเอียดจาก Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 09 ปิดการใช้งาน LKM โดยการเพิ่มบรรทัดต่อไปนี้ลงไปใน kernel configuration file: options NO_LKM

Portmap

ค่าเริ่มต้น ของ FreeBSD จะเซ็ตให้ portmapper ใช้งานได้ แต่ถ้าคุณไม่มีความจำเป็นที่จะต้องใช้ก็ให้ปิดการใช้งานมันเสีย คุณไม่มีความจำเป็นที่จะต้องใช้ถ้าคุณไม่ใช้โปรแกรมที่ต้องการ RPC ปิดการใช้งานโดยการแก้ไขไฟล์ /etc/rc.conf ดังนี้:

ให้เปลี่ยนจาก

portmap_enable="YES" # Run the portmapper service (or NO).

เป็น

portmap_enable="NO" # Run the portmapper service (or NO).

Sendmail

ค่าเริ่มต้นของ FreeBSD โปรแกรม sendmail สามารถใช้งานได้ ในอดีตเป็นที่รู้กันดีว่ามีปัญหาเรื่องความปลอดภัย แต่ต่อมีได้ปรับปรุงให้ดีขึ้น แต่เนื่องจาก source code ที่มีขนาดใหญ่ที่ไม่สะดวกในเรื่องการตรวจสอบ ดังนั้นจึงควรปิดการใช้ sendmail ถ้าไม่จำเป็น แต่ถ้าจำเป็นจริง ๆ ก็ควร ไปที่ http://www.sendmail.org บ่อย ๆ เพื่อนำ patch มาเพื่อแก้ไข นอกจากนี้ถ้าคุณใช้ sendmail 8.8 ต้องมั่นใจว่าระบบของคุณจะไม่ถูก spammer ใช้เพื่อส่ง spam ดูข้อมูลจาก http://www.sendmail.org/antispam.html ปิดการใช้ sendmail ใน FreeBSD ด้วยการแก้ไฟล์ /etc/rc.conf เปลี่ยน:

sendmail_enable="YES" # Run the sendmail daemon (or NO).

เป็น

sendmail_enable="NO" # Run the sendmail daemon (or NO).

Port and Packages

ไม่ใช้ port หรือแพคเกจโปรแกรมขณะที่กำลังเซ็ตระบบที่ปลอดภัย เพราะคุณไม่รู้ว่าพอร์ตหรือแพจเกจซอฟท์แวร์นั้นจะ install suid-root ไบนารีไฟล์ลงไปหรือไม่ คุณไม่จำเป็นต้องใช้มากกว่าที่คุณมีอยู่ในระบบ ของคุณแล้ว อาจใช้คำสั่ง pkg_add ตามด้วย "-v" หรือ "-n" นอกจานี้ให้ดาวน์โหลดซอฟท์แวร์ที่เป็น source code และคอมไพล์ด้วยต้วคุณเอง

Filesystem quota

ถ้าคุณให้บริการ shell server คุณจำเป็นต้องให้บริการ quota ใน user filesystem (อย่างเช่น /usr/home เป็นต้น) ซึ่งสามารถป้องกันการโจมตีแบบ Denial of Service ได้ (โดยการทำให้ filesystem ทั้งหมดเต็มไปด้วยไฟล์) ทำให้ quota ทำงานด้วยการแก้ไข /etc/rc.conf:

จาก

check_quotas="NO" # Check quotas (or NO).

เป็น

check_quotas="YES" # Check quotas (or NO).

ควรดู man page ของคำสั่งต่อไปนี้เพื่อดูข้อมูลและตัวอย่างวิธีการใช้งาน quota: quotaon, edquota, repquota, quota ต้องมั่นใจว่าใด้เพิ่ม "userquota" ลงไปในไฟล์ /etc/fstab ด้วย (ดู man page ด้วยคำสั่ง man 5 fstab)

Crontab

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

# chmod 640 /etc/crontab

BPF

BPF ย่อมาจาก berkeley packet filter ซึ่งจำเป็นต้องอยู่ใน kernel ถ้าคุณต้องการรัน network sniffing โปรแกรมอย่าง tcpdump หรือ NFR (http://www.nfr.net/) ใช้ BPF ทุกครั้ง โปรแกรมที่ sniff network จากระบบ BSD ต้องใช้ BPF ดังนั้นถ้ามีใครก็ตามที่ได้สิทธิ์ root ใน ระบบของคุณซึ่งมี BPF ใน kernel จะทำให้เขาสามารถรัน sniffer ในเน็ตเวิร์คของคุณได้อย่างง่ายดาย ดังนั้นจึงไม่ควรคอมไพล์ BPF ไปใน kernel ถ้าไม่มีความจำเป็นค่าเริ่มต้นของ FreeBSD kernel จะไม่สนับสนุน BPF

Update OS โดยการใช้ CVSup, CVS, และอื่น ๆ

ถ้าคุณ install ระบบจาก CDROM มีโอกาสที่จะมี bug ที่ถูกค้นพบหลังจากที่คุณได้ install ลงไป ดังนั้นจึงควรอัปเกรดระบบของคุณเป็น -current หรือ -stable ก็ได้ สำหรับรายละเอียดให้ดูจาก http://www.freebsd.org/handbook/handbook277.html#592 อย่าลืมอ่าน ERRATA FreeBSD สำหรับเวอร์ชันที่คุณใช้อยู่ เอกสารเกี่ยวกับ "make world" หลังจากที่คุณได้ source ล่าสุด ของ OS ที่ http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/make-world.html

SSH

คุณควรใช้ SSH แทนที่ telnet, ftp, rlogin, rsh และอื่น ๆ ดังที่กล่าวแล้วข้างต้น สำหรับผู้ใช้ที่ความเร็วต่ำ (อย่างเช่น modem 56 k เป็นต้น) SSH มี -C option (จาก man page):

-C Requests compression of all data (including stdin, stdout, stderr, and data for forwarded X11 and TCP/IP connections). The compression algorithm is the same used by gzip, and the "level" can be con- trolled by the CompressionLevel option (see below). Compression is desirable on modem lines and other slow connections, but will only slow down things on fast networks. The default value can be set on a host-by-host basis in the configuration files; see the Compress option below.

โดย option นี้จะทำให้การติดต่อด้วย SSH เร็วขึ้น

URL ที่เกี่ยวข้อง:

FreeBSD Hardening Project: http://www.watson.org/fbsd-hardening/

FreeBSD ipfw Configuration Page: http://www.metronet.com/~pgilley/freebsd/ipfw

FreeBSD Security advisories: ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/

FreeBSD Security web page: http://www.freebsd.org/security/security.html

Security tools in FreeBSD: http://www.samag.com/archive/0705/feature.shtml

EOF.

ที่มา : http://infosec.sran.org/