1.Lời nói đầu:
Linux đã tạo ra một sự bùng nổ trong lĩnh vực tin học và ngày
càng trở nên phổ biến hiện nay. Rất nhiều các công ty, tổ chức trên thế
giới chấp nhận Linux như là một platform cho sản phẩm của họ, cũng
như nhiều công ty, ISPs sử dụng máy chủ Linux như là các Internet
gateway. Vấn đề an toàn an ninh cho hệ thống Linux ngày càng trở nên
quan trọng và bức thiết hơn. Tài liệu này sẽ có một cái nhìn tổng quát về
an toàn hệ thống và những hướng dẫn giúp tăng cường mức độ an toàn
cho hệ thống Linux.
Kể từ khi Linux được phát triển một cách rộng rãi và nhanh chóng, đặc biệt là trong
các giao dịch kinh doanh quan trọng, an ninh là một vấn đề quyết định sự sống còn
của Linux. Với hàng trăm công cụ bảo vệ sẵn có, người dùng Linux được trang bị
tốt hơn để ngăn chặn và duy trì một hệ thống an toàn. Linux không những hoạt
động tốt mà cũn cú những tính năng và sản phẩm liên quan cho phép xây dựng một
môi trường tương đối an toàn.
1.1 Những nguy cơ an ninh trên linux
Linux và các ứng dụng trờn nó có thể không ít các lỗ hổng an ninh hơn
những hệ điều hành khác. Theo quan điểm của một số chuyên gia máy tính, Linux
có tính an toàn cao hơn các hệ điều hành của Microsoft, vỡ cỏc sản phẩm của
Microsoft không được xem xét kỹ lưỡng và chặt chẽ bằng các sản phẩm mã nguồn
mở như Linux. Hơn nữa, Linux dường như là "miễn nhiễm" với virus máy tính
(hiện tại đó cú xuất hiện một vài loại virus hoạt động trên môi trường Linux nhưng
không ảnh hưởng gì mấy đến người dùng Linux). Nhưng một hệ thống Linux được
cấu hình không tốt sẽ tệ hơn nhiều so với một hệ thống Microsoft được cấu hình tốt
!!! Khi có được một chính sách an ninh tốt và hệ thống được cấu hình theo đúng
chính sách đú thỡ sẽ giúp bạn tạo được một hệ thống an toàn (ở mức mà
chính sách của bạn đưa ra).
Nhưng sự an toàn không phải là thứ có thể đạt được như một mục tiêu cuối cùng.
Đúng hơn đó là tập hợp của những cách cài đặt, vận hành và bảo trì một hệ điều
hành, mạng máy tính, Nó phụ thuộc vào các hoạt động hàng ngày của hệ thống,
người dùng và người quản trị. Bạn phải bắt đầu từ một nền tảng ban đầu và từ đó
gì, và cho ai. Do vậy bạn cần phải có một chính sách bảo mật - đó là danh sách
những gì mà bạn cho phép quan tâm đến và cũng như những gì mà bạn không
cho phép quan tâm đến và dựa trên cơ sở đó bạn có thể có bất kỳ quyết định nào
về việc bảo mật một cách chính xác. Chính sách cũng nên xác định rõ việc đáp
lại của bạn các đối với vi phạm về việc bảo mật và an toàn. Bạn cũng nên để ý
rằng những gì được đề ra khi xây dựng một chính sách bảo mật sẽ phụ thuộc vào
việc bạn đưa ra các định nghĩa về bảo mật. Sau đây là các câu hỏi sẽ cung cấp
một số các chỉ dẫn tổng thể liên quan:
- Làm thế nào bạn phân biệt được các thông tin là nhạy cảm và bí mật?
- Hệ thống cú nờn chứa đựng các thông tin nhạy cảm và bí mật không?
- Chính xác là bạn cần phải đề phòng ai?
- Những người sử dụng từ xa có thật sự cần thiết truy cập tới hệ thống
của bạn không?
- Mật khẩu và giải pháp mã hóa đã đủ bảo vệ hệ thống chưa?
- Bạn có cần phải truy cập Internet không?
- Bạn muốn cho phép hệ thống của bạn có thể được truy cập từ Internet
bao nhiêu lần?
- Bạn sẽ làm gì khi phát hiện ra một sự vi phạm trong việc bảo mật của
bạn?
2 Giới thiệu chung:
2.1 Ai đang phá hoại hệ thống:
Có hai từ để chỉ kẻ xâm nhập hacker và cracker. Một hacker là chỉ
người thích vào một hệ thống nào đó. Một hacker tốt bụng (benign
hacker) là người thích tự xâm nhập vào máy của mình để hiểu rõ những
gì đang diễn ra bên trong và nó đang hoạt động như thế nào. Một hacker
hiểm độc (malicious hacker) là người thích vào hệ thống của người khác.
Benign hacker muốn ngăn chặn tất cả các cuộc phá hoại của các hacker
và từ đó ra đời khái niệm cracker. Thật không may, đã không giống như
người ta mong muốn, và trong tất cả các trường hợp người ta đều dùng
một từ để chỉ đó là kẻ xâm nhập ‘intruder’. Kẻ xâm nhập có thể chia làm
Tràn bộ đệm
Hầu như tất cả các lỗ hổng bảo mật đều do lỗi này. Một ví dụ điển
hình là các lập trình viên đều đặt 256 ký tự cho trường username login.
Bình thường thỡ cỏc lập trình viên sẽ nghĩ không có ai chọn username
quá như vậy cả. Nhưng các hacker sẽ nghĩ, chuyện gì xảy ra nếu tôi nhập
vào quá giới hạn đó ? Những ký tự thêm vào sẽ đi đâu ? họ sẽ gửi 300 ký
tự bao gồm cả mã thực thi trên server và thế là họ đã vào được. Hacker
đó tỡm những lỗi như vậy bằng rất nhiều cách. Đầu tiên phải kể đến là
mã nguồn cho rất nhiều dịch vụ đều cú trờn mạng. Hacker sẽ nghiên cứu
những mã nguồn và tìm lỗi tràn bộ đệm. Thứ hai là hacker có thể xem
chính những chương trình đó mặc dù đọc mã assembly là rất khó. Thứ ba
là hacker có thể kiểm tra bằng rất nhiều dữ liệu ngẫu nhiên. Vấn đề này
chủ yếu gặp khi những chương trình được viết bằng ngôn ngữ C/C++, rất
hiếm trong những chương trình viết bằng Java.
Unexpected combinations
Chương trình thường được xây dựng dựa trên rất nhiều lớp mã, và
hệ điều hành có thể coi là lớp dưới cùng. Kẻ xâm nhập có thể vào các dữ
liệu có thể không có ý nghĩa với lớp này nhưng mà lại có ý nghĩa với lớp
khác. Ngôn ngữ nổi tiếng về xử lý dữ liệu vào của người dùng là PERL.
Chương trình viết bằng PERL thường gửi dữ liệu vào này đến các
chương trình xa hơn. Một cách hacker thường gặp là vào dữ liệu giống
như :
“| mail < /etc/passwd” Mã này sẽ thực thi bởi vì PERL sẽ hỏi hệ điều
hành chạy chương trình thêm vào cùng với các dữ liệu đó. Tuy nhiên hệ
điều hành đã chạy chương trình mail và password file đã được gửi cho
kẻ xâm nhập.
Unhandled input
Hầu hết các chương trình được viết để vào dữ liệu bằng tay. Và các
lập trình viên không tính đến chuyện gì xảy ra nếu nó không đúng là như
vậy.
Dictionary attacks tấn công dựa vào các từ có trong từ điển. Hacker
có thể thử lần lượt các từ có trong từ điển và cỏc hoỏn đổi cho đến khi
đúng password.
Brute force attacks tương tự kiểu tấn công sử dụng từ điển. Nó sử dụng
tất cả các khả năng kết hợp của các ký tự.
3 Giải pháp an ninh:
3.1 Mật khẩu :
3.1.1Bảo mật BIOS - Đặt mật khẩu khởi động:
Có một lời khuyên rằng bạn nên vô hiệu hóa việc khởi động
(booting) từ ổ đĩa mềm đồng thời đặt các mật khẩu (password) trờn cỏc
đặc tính của BIOS. Bạn có thể xem xét tài liệu hướng dẫn về BIOS của
bạn hay xem nó khởi động ở lần kế tiếp như thế nào. Việc vô hiệu hóa
khả năng khởi động từ các ổ đĩa mềm và có cài đặt một mật khẩu để truy
cập tính năng BIOS sẽ cải tiến tính an toàn bảo mật hệ thống của bạn.
Điều này sẽ làm cho một số người không mong đợi cố gắng thay đổi tính
năng BIOS để cho phép khởi động từ ổ đĩa mềm hay khởi động từ máy
server luôn bị nhắc nhở mật khẩu.
3.1.2Chọn một mật khẩu (password) đúng:
Điểm bắt đầu cho một chuyến tham quan về Linux General Security là
mật khẩu. Nhiều người lưu giữ các thông tin và các tập tin đáng giá của
họ trên một máy tính, và chỉ có một việc là ngăn chặn những người khác
khi muốn xem các thông tin hay tập tin đú thỡ yêu cầu gõ vào một chuỗi
dài tám ký tự hoặc nhiều hơn thường được gọi là một mật khẩu. Không
như mọi người đã nghĩ, không thể có một mật khẩu nào không giải được.
Với thời gian và công sức, tất cả mật khẩu đều có thể được đoán ra, kể cả
việc dựng cỏc mưu mẹo trong cuộc sống hay áp lực. Dùng những mưu
mẹo trong cuộc sống để có được các mật khẩu và các phương pháp truy
cập khác vẫn là cách phổ biến nhất và dễ nhất để giành được quyền truy
cập tới các tài khoản và cỏc mỏy server. Chạy một chương trình bẻ khóa
mật khẩu mỗi tuần một lần dựa trên hệ thống của bạn là một ý tưởng
PASS_MIN_LEN 8
"login.defs" là tập tin cấu hình cho chương trình login. Bạn nên xem xét
lại hay thay đổi nội dung tập tin này cho phù hợp với hệ thống riêng biệt
của bạn. Đây là nơi mà bạn đặt các cài đặt chính sách bảo mật khác
(giống như sự mặc định hết hạn của mật khẩu hay chiều dài tối thiểu mật
khẩu có thể chấp nhận).
3.1.3 Default password
Các nhà sản xuất hay các sản phẩm đều luụn cú những mật khẩu
ngầm định lúc đầu, nếu người quản trị chưa thay đổi chỳng thỡ sẽ là kẽ
hở để các hacker có thể thử đầu tiên. Chúng thường là:root root, root
system, sys sys, sys system, daemon daemon, uucp uucp, tty tty, test test,
unix unix, unix test, bin bin, adm adm, adm admin, admin adm, admin
admin, sysman sysman, sysman sys, sysman system, sysadmin sysadmin,
sysadmin sys, sysadmin system, sysadmin admin, sysadmin adm, who
who, learn learn, uuhost uuhost, guest guest, host host, nuucp nuucp, rje
rje, games games, games player, sysop sysop, root sysop, demo demo, …
3.1.4 Tăng tính an toàn của mật khẩu và mó hoỏ:
Mật khẩu trên hệ thống *nix được lưu trong file /etc/passwd, một
file chứa cỏc tờn người sử dụng, UIDs, GIDs, và các mật khẩu được mó
hoỏ cho người sử dụng trên hệ thống. Ngoài ra, file này còn lưu các
thông tin khác, như tên đầy đủ của người sử dụng, đường dẫn thư mục,
hay hệ thống shell. Bất kỳ ai truy cập hệ thống cũng có thể hiển thị nội
dung của file /etc/passwd. Điều này tạo ra khả năng phá hoại với các
user và những kẻ tấn công có thể tạo ra các lỗ hổng bảo mật để nhận
được một bản sao của file mật khẩu này. Các hệ thống *.nix thường sử
dụng thuật toán mó hoỏ (như thuật toán DES) để tạo ra các bảng băm
mật khẩu. DES sử dụng thuật toán mó hoỏ 56 bit. Với thuật toán này,
DES đã được sử dụng như thuật toán mó hoỏ phổ biến trước đây. Tuy
nhiên, theo thời gian, khi phần cứng phát triển và giá thành thiết bị rẻ đi,
thuật toán này đã trở nên dễ dàng giải mã và tạo lại mã. Vì vậy, với các
phiên bản của *.nix hiện tại cung cấp thuật toán mó hoỏ tốt hơn, (có thể
sử dụng tuỳ chọn trong mó hoỏ), sử dụng thuật toán bảng băm MD5 thay
thế cho DES. Passwd là lệnh mặc định sử dụng cho việc thay đổi mật
khẩu trờn cỏc hệ thống *.nix. Lệnh này cũng hỗ trợ việc kiểm tra tính an
toàn tối thiếu đối với các mật khẩu của người sử dụng nhưng không hỗ
trợ tính năng đòi hỏi người sử dụng thay đổi mật khẩu của họ sau một
khoảng thời gian. Ví dụ lệnh passwd trong Sun Solaris hỗ trợ tính năng
trên, và cũng tạo ra các kiểm tra sau:
• Độ dài tối thiểu, mà nhà quản trị có thể chỉ định (mặc định là 6 ký
tự). Chú ý rằng bất chấp độ dài mật khẩu, chỉ có 8 ký tự đầu được
xem cho mục đích chứng thực.
• Phải chứa ít nhất 2 ký tự (hoa hoặc thường) và một số hay biểu
tượng.
• Không thể là tên, đảo ngược tên truy cập hệ thống, hay bất cứ việc
dịch chuyển ký tự từ tên truy cập hệ thống.
• Các mật khẩu mới phải có ít nhất 3 ký tự khác so với mật khẩu cũ.
npasswd, được viết bởi Clyde Hoover, thực hiện các kiểm tra sau:
• Kiểm tra từ vựng (độ dài tối thiểu); không cho phép các ký tự lặp
lại hay các mẫu mật khẩu thông thường như các con số thường gặp;
đòi hỏi mật khẩu là sự pha trộn giữa con số, ký tự, biểu tượng
• Kiểm tra file passwd (không cho phép lấy thông tin từ file passwd).
• Kiểm tra từ điển (không cho phép các mật khẩu được tạo từ các từ
được tìm thấy trong các file từ điển cấu hình).
• Kiểm tra thời điểm (tuỳ chọn - không cho phép sử dụng các mật
khẩu đã được sử dụng gần đây).
• Kiểm tra địa phương (tuỳ chọn - site cấu hình - các kiểm tra chỉ
định; mặc định là không cho phép nhiều tên hostname trong file
.rhosts).
Anlpasswd của viện nghiên cứu quốc gia Argonne về chuyên ngành
thuật toán và khoa học máy tính, là một chương trình viết bằng ngôn ngữ
ssh. Các giá trị BSD (OpenBSD, FreeBSD, BSDi) và một số các phiên
bản Linux (Debian, SuSE, RedHat, Mandrake). Hiện tại, OpenSSH có
thể được sử dụng như phần thêm vào cho mỗi hệ thống *.nix.
Các giải pháp khác
Do sự đa dạng đối với mật khẩu của các hệ thống *.nix cả ngay
trong hệ thống và khi truyền thông, một số phương pháp khỏc đó được
thực hiện để làm tăng tính an toàn cho mật khẩu. Một trong những
phương pháp thông dụng nhất là mô tả các mật khẩu sử dụng một lần và
sau đó được hủy bỏ. Các hệ thống này có 2 thuận lợi sau:
• Chúng hướng tới thực thi các truyền thông mật khẩu mang tính bảo
mật, hầu hết sử dụng việc mó hoỏ trong khuôn dạng của một giao
thức dạng challenge/response, vì vậy các mật khẩu không bao giờ
được truyền trên mạng.
• Vì mật khẩu được sử dụng chỉ một lần, thậm chí nếu chúng bị lấy
đi bởi kẻ tấn công, nó cũng không thể sử dụng lại.
Các hệ thống mật khẩu sử dụng 1 lần (OTP - Once-Time Password) có
thể được thực hiện bởi phần cứng - như là các thẻ smart card - hay trong
phần mềm. Trong khi các giải pháp thương mại tồn tại, chúng ta hãy xét
đến một số các chương trình dạng miễn phí. S/KEY, một trong những hệ
thống dựa theo mô hình OTP, được viết bởi Bellcore (hiện tại viết bởi
Telcordia) và được phát triển như một phần mềm mã nguồn mở. Bellcore
gần đây đã bắt đầu phát triển phiên bản thương mại, nhưng phiên bản
miễn phí vẫn được cung cấp. Khi S/KEY trở thành sản phẩm thương
mại, phần mã nguồn mở của chương trình này vẫn được quan tâm và
phát triển thành sản phẩm OPIE. Cả S/KEY và OPIE sử dụng một hệ
thống challenge/response. Trong mỗi trường hợp, mật khẩu của người sử
dụng được chứa, trong dạng mẫu được mó hoỏ, trờn hệ thống máy chủ.
Mỗi hệ thống sử dụng bộ mã tạo mật khẩu chung dựa theo thông tin
người sử dụng cung cấp lúc ban đầu và liên kết với một số tuần tự. Mật
khẩu đầu tiên của người sử dụng được tạo bằng cách đặt thông tin của
MD4 hay thủ tục mó hoỏ crypt). Thậm chí khi bạn sử dụng thuật toán
mó hoỏ, cỏc mật khẩu mạnh vẫn là phương thức tốt nhất bảo vệ việc phỏ
mó hay đoán mật khẩu. Cuối cùng, việc kiểm tra các mật khẩu của bạn
(ví dụ: với quyền truy cập) là một trong những cách tốt nhất để nâng cao
độ an toàn cho hệ thống của bạn. Các công cụ như Crack rất hữu ích
không chỉ cho những kẻ tấn công mà còn cho cả những người quản trị an
toàn hệ thống. Toàn bộ các công cụ được liệt kê trong bảng sau:
Công cụ
kiểm tra
Phiên
bản
hiện
tại
Có sẵn tại
Môi trường
chạy
Crack 5.0a
Trung tâm nghiên cứu giáo dục thuộc
trường đại học Purdue (CERIAS)
*nix; Solaris,
Linux,
FreeBSD,
NetBSD, OSF,
and Ultrix
anlpasswd 2.3
Có rất nhiều Website cung cấp, gồm
cả server FTP của CERIAS
*nix
npasswd
Thuộc trường đại học Texas tại
Ultrix
OPIE 2.32
The Inner Net
( />*nix
3.2 Cấu hình hệ thống
3.2.1 Tài khoản root:
Tài khoản root là được gán quyền nhiều nhất trên một hệ thống Unix. Taì
khoản "root" không có một hạn chế bảo mật nào. Điều này có nghĩa là hệ thống
cho rằng bạn biết những gì bạn đang làm, và sẽ thực hiện chính xác những gì
bạn yêu cầu - không có câu hỏi nào được đặt ra về những điều đú. Chớnh vì vậy,
nó rất rễ dàng với một câu lệnh nhập sai có thể sẽ xóa sạch tất cả các tập tin hệ
thống. Vì vậy khi sử dụng tài khoản này bạn phải tuyệt đối cẩn thận tránh những
lỗi lầm đáng tiếc. Để phục vụ cho các lý do bảo mật không cần phải log-in vào
máy server của bạn như là "root". Hơn nữa, nếu bạn không có làm việc trờn mỏy
server của bạn, thì đừng nên vào và ra khỏi hệ thống như là "root"- điều này là
rất dở.
Đặt thời gian time-out login cho tài khoản root:
Mặc dù được lưu ý là không nên vào hệ thống với account là "root" và
logout khi không làm việc trờn mỏy server, tuy nhiên vẫn có những người quản
trị hệ thống vẫn còn lưu lại màn hình login như "root" hay quên ra khỏi hệ thống
(logout) sau khi kết thúc công việc của họ hoặc rời khỏi các máy trạm không
cùng với tài khoản nào. Để giải quyết vấn đề này ta tạo một bash shell tự động
logout sau khi không được dùng trong một khoảng thời gian. Để thực hiện điều
đó, bạn phải đặc biến đặc biệt của Linux được đặt tên là "TMOUT" tới thời gian
tính bằng giây không có thao tác nào được nhập vào trước khi logout.
Chỉnh sửa tập tin profile của bạn "vi /etc/profile" và thờm dũng sau vào một nơi
nào đó bên dưới dòng chứa "HISTFILESIZE=" trong tập tin này:
TMOUT=7200
Giá trị mà chúng ta nhập vào cho biến "TMOUT=" là được tính bằng giây và
biểu thị 2 giờ (60*60=3600*2=7200 giây). Điều quan trọng là hãy ghi chú rằng
(halt) cho những người sử dụng hợp lệ trờn mỏy server của bạn.
Để làm việc này , chạy dòng lệnh sau:
[root@deep /]# rm -f /etc/security/console.apps/<servicename>
Trong đó (servicename> là tên của chương trình mà bạn muốn vô hiệu
hóa truy cập console-equivalent. Tuy nhiên, trừ khi bạn dùng xdm, hãy
cẩn thận không xóa tập tin xserver hoặc là không ai ngoài root có thể
khởi động hệ thống xserver. (Nếu bạn luụn dựng xdm để khởi động
xserver, root là người sử dụng duy nhất cần để khởi động X, trong
trường hợp này, bạn thật sự muốn xóa tập tin xserver.
Như ví dụ sau:
[root@deep /]# rm -f /etc/security/console.apps/halt
[root@deep /]# rm -f /etc/security/console.apps/poweroff
[root@deep /]# rm -f /etc/security/console.apps/reboot
[root@deep /]# rm -f /etc/security/console.apps/shutdown
[root@deep /]# rm -f /etc/security/console.apps/xserver (nếu xóa bỏ,chỉ root là người
có thể khởi động X).
Việc này sẽ vô hiệu hóa console-equivalent truy cập tới các chương trình halt,
poweroff, reboot và shutdown. Một lần nữa, chương trình xserver chỉ áp dụng
khi mà bạn đã cài đặt giao diện Xwindow trên hệ thống của bạn.
Ghi chú: Nếu cài đặt theo các bước của chương trình, thì giao diện Xwindow
không được cài đặt trờn mỏy server và tất cả cỏc tõpj tin được mô tả sẽ không
xuất hiện trong thư mục " / etc / security". do vậy đừng chú ý các bước trên.
Vô hiệu hóa tất cả truy cập console
Thư viện Linux-PAM được cài đặt mặc định trên hệ thống của bạn cho phép các
người quản trị hệ thống chọn cách để các ứng dụng xác nhận những người sử
dụng như thế nào, vi dụ như truy cập console. truy cập tập tin và chương trình.
Để vô hiệu hóa tất cả các truy cập này cho những người sử dụng, bạn phải đánh
dấu # vào đầu tất cả cỏc dũng cú tham chiếu tới pam_console.so trong thư mục
"/etc/pam.d" (nghĩa là bạn chuyển cỏc dũng đú thành ghi chú (comment line).
Đoạn script sau sẽ thực hiện mánh lới một cách tự động. Đăng nhập như "root",
Bước 2.
Bảo đảm rằng người sở hữu là root.
[root@deep /]# stat /etc/inetd.conf
File: "/etc/inetd.conf"
Size: 2869 Filetype: Regular File
Mode: (0600/-rw ) Uid: ( 0/ root) Gid: ( 0/root)
Device: 8,6 Inode: 18219 Links: 1
Access: Web Sep 22 16:24:16 1999(00000.00:10:44)
Modify: Mon Sep 20 10:22:44 1999(00002.06:12:16)
Change: Mon Sep 20 10:22:44 1999(00002.06:12:16)
Bước 3.`
Chỉnh sửa tập tin inetd.conf (vi /etc/inetd.conf) và vô hiệu hóa các dịch
vụ như sau: