CuÌ€ng vơÌi sưÌ£ phaÌt triển của caÌc hêÌ£ thôÌng chaÌ£y Linux trên internet, ngươÌ€i ta đã vaÌ€ đang tiÌ€m ra ngaÌ€y caÌ€ng nhiêÌ€u lỗ hổng bảo mâÌ£t của caÌc phâÌ€n mêÌ€m miễn phiÌ trên caÌc hêÌ£ thôÌng naÌ€y. HiêÌ£n coÌ râÌt nhiêÌ€u kiểu tâÌn công, xâm nhâÌ£p hêÌ£ thôÌng Linux như: tâÌn công gây traÌ€n bôÌ£ đêÌ£m (Buffer Over Flow), tâÌn công kiểu tưÌ€ chôÌi caÌc diÌ£ch vuÌ£ (Denial of Services), tâÌn công dưÌ£a vaÌ€o cửa sau (Back door)... MôÌ£t khi kẻ tâÌn công chiêÌm đươÌ£c quyêÌ€n ˜root™ (taÌ€i khoản ngươÌ€i duÌ€ng coÌ quyêÌ€n cao nhâÌt trên hêÌ£ thôÌng), toaÌ€n bôÌ£ hêÌ£ thôÌng đoÌ biÌ£ đăÌ£t dươÌi quyêÌ€n điêÌ€u khiển của kẻ xâm nhâÌ£p. VâÌ£y caÌc nhaÌ€ quản triÌ£ phải laÌ€m giÌ€ để bảo vêÌ£ hêÌ£ thôÌng của miÌ€nh? LaÌ€m sao ngăn chăÌ£n đươÌ£c ngươÌ€i duÌ€ng coÌ quyêÌ€n root phaÌ hoaÌ£i caÌc thaÌ€nh phâÌ€n quan troÌ£ng của hêÌ£ thôÌng?
HêÌ£ thôÌng Linux thông thươÌ€ng coÌ môÌ£t sôÌ nhươÌ£c điểm sau:
NgươÌ€i chiêÌm đươÌ£c quyêÌ€n root sẽ coÌ quyêÌ€n quyêÌt điÌ£nh sôÌ phâÌ£n tâÌt cả caÌc thaÌ€nh phâÌ€n của hêÌ£ thôÌng: châÌm dưÌt caÌc tiêÌn triÌ€nh (kill), xoaÌ bỏ bâÌt cưÌ tâÌ£p tin naÌ€o, thay đổi bâÌt cưÌ tâÌ£p tin câÌu hiÌ€nh naÌ€o. VơÌi ngươÌ€i quản triÌ£ hêÌ£ thôÌng thưÌ£c sưÌ£ thiÌ€ điêÌ€u đoÌ laÌ€ câÌ€n thiêÌt, nhưng vơÌi kẻ xâm nhâÌ£p thiÌ€ điêÌ€u naÌ€y vô vuÌ€ng nguy hiểm.
CaÌc tâÌ£p tin quan troÌ£ng của hêÌ£ thôÌng không đươÌ£c bảo vêÌ£ chôÌng truy nhâÌ£p (đoÌ£c/ghi) bâÌt hơÌ£p phaÌp. Những tâÌ£p tin cưÌ£c kyÌ€ quan troÌ£ng trên hêÌ£ thôÌng như init, login... hay caÌc tâÌ£p tin câÌu hiÌ€nh, thiêÌt lâÌ£p tươÌ€ng lửa, thiêÌt lâÌ£p vêÌ€ thông tin maÌ£ng (IP, network, routting, name server...), biÌ£ thay đổi thiÌ€ không thể lươÌ€ng trươÌc đươÌ£c hâÌ£u quả.
CaÌc tiêÌn triÌ€nh không đươÌ£c bảo vêÌ£. Trên caÌc maÌy chủ Linux, coÌ râÌt nhiêÌ€u tiêÌn triÌ€nh quan troÌ£ng phải đươÌ£c chaÌ£y thươÌ€ng trưÌ£c để phuÌ£c vuÌ£ khaÌch haÌ€ng: TiêÌn triÌ€nh httpd thưÌ£c hiêÌ£n chưÌc năng của web server, tiêÌn triÌ€nh ftpd cung câÌp truy câÌ£p tâÌ£p tin theo giao thưÌc FTP, tiêÌn triÌ€nh named thưÌ£c hiêÌ£n diÌ£ch vuÌ£ giải nghĩa tên/điÌ£a chỉ maÌy tiÌnh (Domain Name Service)... NêÌu ngươÌ€i duÌ€ng coÌ quyêÌ€n thiÌch hơÌ£p (quyêÌ€n root chẳng haÌ£n), hoÌ£ coÌ thể châÌm dưÌt caÌc tiêÌn triÌ€nh bâÌt cưÌ luÌc naÌ€o (viÌ duÌ£: killall httpd), điêÌ€u naÌ€y gây ảnh hưởng vô cuÌ€ng lơÌn đôÌi vơÌi caÌc hêÌ£ thôÌng phuÌ£c vuÌ£ nhiêÌ€u ngươÌ€i duÌ€ng như maÌy chủ web, maÌy chủ thư điêÌ£n tử (mail server), maÌy chủ giải nghĩa tên (Name Server)...
CaÌc nhươÌ£c điểm trên laÌ€ do Linux thưÌ€a hưởng kiêÌn truÌc, thiêÌt kêÌ cơ bản tưÌ€ hêÌ£ thôÌng UNIX. RâÌt may, nhơÌ€ lơÌ£i iÌch của phâÌ€n mêÌ€m mã nguôÌ€n mở, ngươÌ€i ta đã nhanh choÌng khăÌc phuÌ£c nhươÌ£c điểm naÌ€y băÌ€ng caÌch thay đổi trong mã nguôÌ€n của nhân (kernel) Linux, tiÌch hơÌ£p vaÌ€o đoÌ caÌc tiÌnh năng mơÌi vaÌ€ cung câÌp môÌ£t sôÌ công cuÌ£ quản triÌ£, đươÌ£c đăÌ£t tên laÌ€ LIDS (Linux Intrusion Detection System). Mã nguôÌ€n của LIDS vaÌ€ caÌc taÌ€i liêÌ£u coÌ liên quan coÌ taÌ£i website http://www.lids.org.
MăÌ£c duÌ€ cho đêÌn nay Linus Torvard vaÌ€ những ngươÌ€i coÌ traÌch nhiêÌ£m duy triÌ€ sưÌ£ phaÌt triển của nhân Linux vẫn chưa chiÌnh thưÌc quyêÌt điÌ£nh tiÌch hơÌ£p caÌc tiÌnh năng mơÌi vaÌ€o phiên bản Linux kernel hiêÌ£n taÌ£i, nhưng LIDS đã đươÌ£c môÌ£t sôÌ nhaÌ€ phân phôÌi Linux chiÌnh thưÌc sử duÌ£ng trong sản phẩm của miÌ€nh, điển hiÌ€nh laÌ€ EnGarde (http://www.engardelinux.com).
CaÌc ThaÌ€nh PhâÌ€n VaÌ€ TiÌnh Năng Của Lids
LIDS bao gôÌ€m:
- MôÌ£t phâÌ€n mã đươÌ£c tiÌch hơÌ£p trong Linux kernel, đươÌ£c patch vaÌ€o mã nguôÌ€n của kernel
- Công cuÌ£ quản triÌ£ coÌ tên laÌ€ lidsadm (LIDS Admin Tool) cuÌ€ng môÌ£t sôÌ tâÌ£p tin câÌu hiÌ€nh trong thư muÌ£c /etc/lids/ duÌ€ng để thiêÌt lâÌ£p, thay đổi câÌu hiÌ€nh của LIDS.
LIDS cho pheÌp ngươÌ€i quản triÌ£ hêÌ£ thôÌng:
- Bảo vêÌ£ caÌc tâÌ£p tin, thư muÌ£c trên hêÌ£ thôÌng (không phuÌ£ thuôÌ£c vaÌ€o kiểu hêÌ£ thôÌng tâÌ£p tin chưÌa tâÌ£p tin/thư muÌ£c đoÌ laÌ€ ext2, ext3 hay vfat..) khỏi sưÌ£ truy câÌ£p bâÌt hơÌ£p phaÌp, kể cả ngươÌ€i sử duÌ£ng coÌ quyêÌ€n root.
- Bảo vêÌ£ caÌc tiêÌn triÌ€nh không biÌ£ châÌm dưÌt (kill) bởi caÌc tiêÌn triÌ€nh khaÌc do bâÌt cưÌ ngươÌ€i duÌ€ng naÌ€o thưÌ£c hiêÌ£n.
- Kiểm soaÌt vaÌ€ ngăn chăÌ£n caÌc thao taÌc vaÌ€o ra mưÌc thâÌp do caÌc chương triÌ€nh không mong muôÌn thưÌ£c hiêÌ£n.
CaÌ€i ĐăÌ£t Lids
Khi tải vêÌ€ mã nguôÌ€n LIDS, baÌ£n phải choÌ£n phiên bản phuÌ€ hơÌ£p vơÌi phiên bản của Linux kernel. ViÌ duÌ£, vơÌi kernel-2.4.18 baÌ£n phải tải vêÌ€ phiên bản LIDS coÌ phâÌ€n version laÌ€ 2.4.18. LIDS đươÌ£c phaÌt triển dưÌ£a trên caÌc bản Linux kernel chiÌnh thưÌc tưÌ€ http://www.kernel.org.
TiÌch hơÌ£p LIDS vaÌ€o mã nguôÌ€n của Linux kernel:
Tải vêÌ€ mã nguôÌ€n của LIDS vaÌ€ Linux kernel. Nên để mã nguôÌ€n của Linux Kernel taÌ£i thư muÌ£c /usr/src/linux để caÌc chương triÌ€nh khaÌc coÌ thể truy câÌ£p đêÌn. Giải neÌn LIDS (taÌ£i môÌ£t thư muÌ£c khaÌc), baÌ£n sẽ thâÌy trong đoÌ coÌ môÌ£t tâÌ£p tin coÌ đuôi laÌ€ .patch, cheÌp tâÌ£p tin naÌ€y vaÌ€o thư muÌ£c /usr/src/linux vaÌ€ chuyển vaÌ€o thư muÌ£c chưÌa mã nguôÌ€n Linux kernel để tiêÌn haÌ€nh patch vaÌ€ biên diÌ£ch laÌ£i.
#cd /usr/src/linux
#patch -p1 < lids_version-kernel_version.patch
(lids_version laÌ€ phiên bản của LIDS, kernel_version laÌ€ phiên bản của Linux kernel)
CâÌu hiÌ€nh caÌc tiÌnh năng của kernel:
#make menuconfig hoăÌ£c make config (make xconfig nêÌu baÌ£n đang ở trong môi trươÌ€ng X Window)
NhơÌ bâÌ£t caÌc tuyÌ€ choÌ£n:
<*>Prompt for development and/or incomplete code/drivers
<*>Sysctl support
<*>Linux Intrusion Detection System support (EXPERIMENTAL) (NEW).
Biên diÌ£ch kernel:
#make dep
#make bzImage
#make modules
#make modules_install
QuaÌ triÌ€nh biên diÌ£ch diễn ra nhanh hay châÌ£m phuÌ£ thuôÌ£c vaÌ€o câÌu hiÌ€nh maÌy tiÌnh, phiên bản của kernel vaÌ€ caÌc tuyÌ€ choÌ£n maÌ€ baÌ£n choÌ£n khi câÌu hiÌ€nh kernel.
CaÌ€i đăÌ£t kernel mơÌi:
Sau khi quaÌ triÌ€nh trên kêÌt thuÌc, cheÌp tâÌ£p tin bzImage trong thư muÌ£c /usr/src/linux/boot/arch/i386 (nêÌu CPU laÌ€ Intel) vaÌ€o thư muÌ£c /boot vaÌ€ coÌ thể đổi tên, viÌ duÌ£ như secu_kernel.
NêÌu duÌ€ng lilo để khởi đôÌ£ng hêÌ£ thôÌng, baÌ£n phải soaÌ£n laÌ£i tâÌ£p tin /etc/lilo.conf vaÌ€ thêm môÌ£t muÌ£c mơÌi như sau:
image=/boot/secu_kernel
label=secu
read-only
root=/dev/hda2
(/dev/hda2 laÌ€ phân vuÌ€ng chưÌa thư muÌ£c gôÌc / , baÌ£n thay noÌ băÌ€ng tên phân vuÌ€ng gôÌc của baÌ£n, nêÌu không biêÌt phân vuÌ€ng gôÌc, gõ lêÌ£nh mount không tham sôÌ, baÌ£n sẽ nhâÌ£n đươÌ£c danh saÌch caÌc phân vuÌ€ng đang đươÌ£c kêÌt gaÌn, trong đoÌ coÌ cả phân vuÌ€ng gôÌc).
Sau đoÌ thưÌ£c hiêÌ£n lêÌ£nh /sbin/lilo để câÌ£p nhâÌ£t muÌ£c mơÌi đoÌ.
Biên diÌ£ch caÌc công cuÌ£ quản triÌ£ của LIDS:
Chuyển vaÌ€o thư muÌ£c chưÌa mã nguôÌ€n của LIDS, thưÌ£c hiêÌ£n câÌu hiÌ€nh, biên diÌ£ch vaÌ€ caÌ€i đăÌ£t LIDS.
#configure
#make
#make install
Thông thươÌ€ng lidsadm đươÌ£c caÌ€i đăÌ£t vaÌ€o thư muÌ£c /sbin, caÌc tâÌ£p tin câÌu hiÌ€nh đươÌ£c caÌ€i đăÌ£t trong thư muÌ£c /etc/lids. BaÌ£n coÌ thể thay đổi caÌc tâÌ£p tin câÌu hiÌ€nh naÌ€y vaÌ€ thưÌ£c hiêÌ£n lêÌ£nh:
#lidsadm -U để câÌ£p nhâÌ£t sưÌ£ thay đổi đoÌ.
Khởi đôÌ£ng laÌ£i hêÌ£ thôÌng vơÌi kernel mơÌi (secu_kernel) băÌ€ng caÌch choÌ£n secu taÌ£i dâÌu nhăÌc lilo.
Sử DuÌ£ng Lids
Bảo vêÌ£ hêÌ£ thôÌng:
Sau khi hêÌ£ thôÌng khởi đôÌ£ng xong, baÌ£n kiÌch hoaÌ£t chêÌ đôÌ£ bảo vêÌ£ của LIDS băÌ€ng lêÌ£nh
#lidsadm -I
Để lêÌ£nh trên đươÌ£c thưÌ£c hiêÌ£n mỗi khi khởi đôÌ£ng hêÌ£ thôÌng, baÌ£n coÌ thể thêm lêÌ£nh đoÌ vaÌ€o tâÌ£p tin /etc/rc.d/rc.local hoăÌ£c tâÌ£p tin naÌ€o đoÌ tương tưÌ£ trên bản Linux của baÌ£n.
Thay đổi chêÌ đôÌ£:
Sau khi hêÌ£ thôÌng đươÌ£c bảo vêÌ£, nêÌu baÌ£n câÌ€n chuyển sang chêÌ đôÌ£ thông thươÌ€ng để thay đổi caÌc tâÌ£p tin câÌu hiÌ€nh, caÌc tâÌ£p tin đươÌ£c bảo vêÌ£, baÌ£n duÌ€ng lênh:
# /sbin/lidsadm -S ” -LIDS
Sau đoÌ kiÌch hoaÌ£t laÌ£i hêÌ£ thôÌng bảo vêÌ£:
# /sbin/lidsadm -S ” +LIDS
NêÌu baÌ£n thay đổi caÌc tâÌ£p tin câÌu hiÌ€nh của lids, sử duÌ£ng lêÌ£nh sau để naÌ£p caÌc thông tin đoÌ vaÌ€o vuÌ€ng bôÌ£ nhơÌ của kernel:
# /sbin/lidsadm -S ” +RELOAD_CONF
CaÌc tâÌ£p tin câÌu hiÌ€nh của LIDS:
- lids.conf: điÌ£nh nghĩa caÌc đôÌi tươÌ£ng đươÌ£c bảo vêÌ£ vaÌ€ haÌ€nh đôÌ£ng bảo vêÌ£ maÌ€ LIDS câÌ€n thưÌ£c hiêÌ£n; coÌ thể thêm, bơÌt caÌc đôÌi tươÌ£ng băÌ€ng lidsadm.
- lids.cap: chưÌa caÌc tiÌnh năng đươÌ£c lids sử duÌ£ng; baÌ£n coÌ thể thêm, bơÌt caÌc tiÌnh năng băÌ€ng caÌch đăÌ£t dâÌu + hoăÌ£c - trươÌc tên caÌc tiÌnh năng đoÌ.
- lids.net: điÌ£nh nghĩa caÌch thưÌc maÌ€ LIDS sẽ gửi email cho baÌ£n khi coÌ sưÌ£ kiêÌ£n giÌ€ đoÌ xảy ra trên hêÌ£ thôÌng maÌ€ baÌ£n câÌ€n quan tâm, noÌ chưÌa tên mail server, điÌ£a chỉ của baÌ£n, tiêu đêÌ€ của bưÌc thư... TâÌ£p tin naÌ€y câÌ€n coÌ khi baÌ£n biên diÌ£ch kernel vơÌi tuyÌ€ choÌ£n câÌ€u hiÌ€nh laÌ€ Send security alerts through network.
- lids.pw: chưÌa mâÌ£t khẩu của nhaÌ€ quản triÌ£, duÌ€ng để kiÌch hoaÌ£t lêÌ£nh lidsadm. TâÌ£p tin naÌ€y câÌ€n coÌ khi baÌ£n biên diÌ£ch kernel vơÌi tuÌ€y choÌ£n Allow switching LIDS protections.
Sử duÌ£ng lêÌ£nh lidsadm -P để thay đổi passwd của lidsadm.
Bảo vêÌ£ tâÌ£p tin/thư muÌ£c:
LêÌ£nh sau cho pheÌp bảo vêÌ£ môÌ£t tâÌ£p tin, thư muÌ£c naÌ€o đoÌ, viÌ duÌ£ tâÌ£p tin /etc/lilo.conf, không cho ai biêÌt sưÌ£ coÌ măÌ£t của noÌ trên hêÌ£ thôÌng, kể cả root:
# lidsadm -A -o /etc/lilo.conf -j DENY
CâÌ£p nhâÌ£t laÌ£i câÌu hiÌ€nh băÌ€ng lêÌ£nh:
# /sbin/lidsadm -S ” +RELOAD_CONF
BaÌ£n sẽ không thể thâÌy tâÌ£p tin /etc/lilo:
#cat /etc/lilo.conf
cat: /etc/lilo.conf: No such file or directory
NgoaÌ€i tuyÌ€ choÌ£n DENY, baÌ£n coÌ thể thay vaÌ€o đoÌ caÌc tuyÌ€ choÌ£n bảo vêÌ£ khaÌc như:
READ: Chỉ đươÌ£c đoÌ£c
WRITE: CoÌ thể đoÌ£c, ghi
APPEND: Chỉ coÌ thể thêm vaÌ€o caÌc dữ liêÌ£u mơÌi ở cuôÌi tâÌ£p tin (coÌ iÌch vơÌi caÌc tâÌ£p tin log như /var/log/message ,/var/log/secure...)
Cho pheÌp môÌ£t tâÌ£p tin, thư muÌ£c naÌ€o đoÌ đươÌ£c môÌ£t chương triÌ€nh naÌ€o đoÌ đoÌ£c hoăÌ£c ghi:
ViÌ duÌ£: BaÌ£n câÌm tâÌt cả caÌc đôÌi tươÌ£ng khaÌc đoÌ£c/ghi thư muÌ£c /var/www/html viÌ€ noÌ laÌ€ thư muÌ£c chưÌa caÌc taÌ€i liêÌ£u web quan troÌ£ng. Nhưng noÌ câÌ€n đươÌ£c web server sử duÌ£ng để cung câÌp caÌc thông tin cho moÌ£i ngươÌ€i:
(CâÌm tâÌt cả moÌ£i ngươÌ€i đoÌ£c/ghi)
# lidsadm -A -o /home/httpd -j DENY
(Cho pheÌp web server đoÌ£c)
# lidsadm -A -s /usr/sbin/httpd -o /var/www/html -j READ
Bảo vêÌ£ caÌc tiêÌn triÌ€nh:
CaÌc tiêÌn triÌ€nh laÌ€ tiêÌn triÌ€nh con của init coÌ thể đươÌ£c bảo vêÌ£ khỏi biÌ£ kill vơÌi tuyÌ€ choÌ£n: -29:CAP_INIT_KILL trong tâÌ£p tin /etc/lids/lids.cap
NgoaÌ€i ra, baÌ£n coÌ thể giâÌu môÌ£t tiêÌn triÌ€nh naÌ€o đoÌ khi chaÌ£y băÌ€ng lêÌ£nh:
#lidsadm -A -s <đươÌ€ng dẫn tơÌi chương triÌ€nh> -t -o CAP_HIDDEN -j INHERIT
ViÌ duÌ£, che giâÌu tiêÌn triÌ€nh httpd:
#lidsadm -A -s /usr/sbin/httpd -t -o CAP_HIDDEN -j INHERIT
CaÌc tiêÌn triÌ€nh đươÌ£c giâÌu sẽ không thể nhiÌ€n thâÌy đươÌ£c băÌ€ng lêÌ£nh ps hoăÌ£c biÌ£ lưu laÌ£i taÌ£i tâÌ£p tin naÌ€o đoÌ trong thư muÌ£c /proc.
NgoaÌ€i ra coÌ€n nhiêÌ€u tiÌnh năng hữu iÌch nữa đươÌ£c thiêÌt lâÌ£p trong /etc/lids/lids.cap để bảo vêÌ£ caÌc thao taÌc vaÌ€o ra câÌp thâÌp, thay đổi câÌu hiÌ€nh maÌ£ng... BaÌ£n nên xem chi tiêÌt trong phiên bản LIDS của miÌ€nh.
PhaÌt hiêÌ£n kẻ xâm nhâÌ£p vaÌ€ thông baÌo cho ngươÌ€i quản triÌ£:
Kẻ xâm nhâÌ£p coÌ thể biÌ£ phaÌt hiêÌ£n bởi môÌ£t trong caÌc haÌ€nh đôÌ£ng sau:
- Sử duÌ£ng công cuÌ£ queÌt cổng như nmap, satan, super scan...
- Sử duÌ£ng thao taÌc vaÌ€o ra câÌp thâÌp vơÌi caÌc cổng truy nhâÌ£p...
- ThưÌ£c hiêÌ£n thao taÌc traÌi pheÌp vơÌi caÌc đôÌi tươÌ£ng đã đươÌ£c LIDS bảo vêÌ£...
CaÌc haÌ€nh đôÌ£ng trên sẽ đươÌ£c ghi laÌ£i trong hêÌ£ thôÌng thông qua caÌc tâÌ£p tin log, LIDS coÌ€n cho pheÌp gửi caÌc thông baÌo trên tơÌi ngươÌ€i quản triÌ£ thông qua email (khai baÌo trong tâÌ£p tin /etc/lids/lids.net)
NêÌu kẻ xâm nhâÌ£p chiêÌm đươÌ£c truy nhâÌ£p mưÌc console, LIDS sẽ châÌm dưÌt hoaÌ£t đôÌ£ng của phiên laÌ€m viêÌ£c đoÌ.
LơÌ€i KêÌt
Công cuÌ£ bảo mâÌ£t tôÌt nhâÌt vẫn chỉ laÌ€ công cuÌ£ vaÌ€ noÌ coÌ thể biÌ£ bẻ gẫy bởi môÌ£t hacker naÌ€o đoÌ. Không coÌ môÌ£t bưÌc tươÌ€ng lửa naÌ€o laÌ€ an toaÌ€n mãi mãi trên internet, không coÌ môÌ£t hêÌ£ thôÌng naÌ€o laÌ€ bâÌt khả mãi mãi xâm phaÌ£m... ViêÌ£c lâÌ£p chiÌnh saÌch bảo mâÌ£t tôÌt vaÌ€ coÌ quy triÌ€nh giaÌm saÌt, theo dõi chăÌ£t chẽ của con ngươÌ€i vẫn laÌ€ điêÌ€u quan troÌ£ng hơn cả.