Tài liệu tham khảo kỹ thuật công nghệ, chuyên ngành tin học Máy chủ Linux
Trang 11.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ịchkinh 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ừ đó cải thiện tính an toàn của hệ thống của bạn nhiều nhất có thể được mà vẫn đảm bảo các hoạt động bình thường của hệ thống.
1.2 Xem xét chính sách an ninh
Kết nối vào Inernet là nguy hiểm cho hệ thống mạng của bạn với mức an toàn thấp Từ những vấn đề trong các dịch vụ TCP/IP truyền thống, tính phức tạp của việc cấu hình máy chủ, các lỗ hổng an ninh bên trong quá trình phát triển phần mềm và nhiều nhân tố khác góp phần làm cho những hệ thống máy chủ không được chuẩn bị chu đáo có thể bị xâm nhập và luôn tồn tại những nguy cơ tiềm tàng về vấn đề an toàn trong đó Mục đích của một chính sách an toàn hệ thống là quyết định một tổ chức sẽ phải làm như thế nào để bảo vệ chính nó Để có được mộtchính sách an ninh hiệu quả, người xây dựng các chính sách này phải hiểu và có thể kết hợp tất cả các thông tin, yêu cầu, Khi một tình huống xảy ra nằm ngoài dự kiến, chẳng hạn một sự xâmnhập trái phép vào hệ thống của bạn, câu hỏi lớn nhất là "sẽ phải làm gì đây ?" Những sai sót trong chính sách an ninh không chỉ liên quan đến những kẻ xâm nhập, mà còn liên quan đến những vấn đề bình thường như thời tiết, thiên tai, cháy, nổ, hư hỏng thiết bị, Do vậy, việc thiết lập một chính sách an ninh tốt cho việc giải quyết những sự cố phải được lên kế hoạch kỹ lưỡng,được xem xét và chứng nhận bởi người có quyền hạn trong công ty.
Một chính sách an ninh tốt nên bao gồm các vấn đề sau :
Trang 2oChính sách phục hồi dữ liệu khi có sự cố
oChính sách phục hồi hệ thống trong trường hợp hư hỏng thiết bịoChính sách, cách thức điều tra những kẻ xâm nhập trái phép
oChính sách, cách thức điều tra khi công ty bị cáo buộc xâm nhập vào các hệ thống khác
oCách thức, quy trình và nơi thông báo sự xâm nhập trái phép từ bên ngoài hay gây ra bởi các nhân viên của mình.
oChính sách an ninh về mặt vật lý của hệ thống
Chính sách bảo mật:
Một điều quan trọng cần phải chỉ ra là bạn không thể thực hiện việc an toàn và bảo mật hệ thống nếu bạn chưa xác định được là cần phải bảo vệ những 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ệcbả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 2 loại: Từ bên trong và bên ngoài.
Từ bên ngoài: outsiders:
Xâm nhập từ bên ngoài mạng, tấn công webserver, chuyển thư spam qua mailserver, … chúng cũng có thể tấn công fire wall để tấn công những máy bên trong mạng Kẻ xâm nhập từ bên ngoài có thể đến từ internet, đường dial-up, physical break-ins, hoặc từ một đối tác (vender, customer, reseller,…)
Từ bên trong ‘insiders’
Kẻ xâm nhập có một tài khoản hợp pháp trong hệ thống mạng và muốn tăng quyền ưu tiên của mình để phục vụ những mục đích khác nhau.
Trang 32.2 Những kẻ xâm nhập vào hệ thống của ta như thế nào
Chú ý là hệ thống phát hiện xâm nhập mạng có liên quan rất chặt với xâm nhập từ xa.
2.3 Tại sao kẻ xâm nhập có thể vào được hệ thống của chúng ta
Phần mềm luôn có lỗi Những người quản trị hệ thống và các lập trình viên theo dõi và nắm được tất cả các lỗi có thể có Còn những kẻ xâm nhập chỉ cần tìm một lỗi để có thể xâm nhập vào hệ thống.
2.3.1 Những lỗi phần mềmTrà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
Trang 4bộ nhớ, và thay đổi nó ở trong bộ nhớ Tuy nhiên trước khi A ghi lại file thì chương trình B đã thực thi xong quá trình thay đổi file Bây giờ thì chương trình A ghi lại file và tất cảcác thay đổi của B sẽ bị mất Vì vậy cần phải có thứ tự nối tiếp thích hợp, race condition cũng rất hiếm khi xảy ra Kẻ xâm nhập thường phải thử hàng nghìn lần trước khi có thể vào được hệ thống
2.3.2 Cấu hình hệ thống :
những cấu hình ngầm định: Hầu hết các hệ thống đều được gửi đến cho khách hàng với
cấu hình ngầm định, một cấu hình dễ sử dụng Thật không may, dễ sử dụng đồng nghĩa với dễ xâm nhập
Trust relationships
Kẻ xâm nhập thường khai thác các liên kết tin tưởng trên mạng.
2.3.3 Password cracking
Really weak passwords khi pass quá đơn giản để đoán ra khi mà người đó có quan hệ
với bạn Ví dụ đa số người dùng lấy mật khẩu là tên của mình, tên vợ, tên người yêu, hay số nhà, số điện thoại, … tất cả đều thể hiện mật khẩu của bạn quá "yếu".
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ự.
Trang 53 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 hay Việc này giúp bạn tìm và thay thế các mật khẩu mà nó dễ dàng được đoán ra hay có hiệu lực kém Cũng thế, một cơ chế kiểm tra mật khẩu là nên có để loại bỏ những mật khẩu kém hiệu lực khi lần đầu tiên chọn một mật khẩu hay thay đổi một mật khẩu cũ Chúng ta không nên chấp nhận một mật khẩu mới với chuỗi ký tự là các từ dễ hiểu, hoặc là tất cả các ký tự đều có định dạng in hay thường giống nhau, hoặc không chứa đựng các số hay các ký tự đặc biệt.
Chúng ta nên tuân theo các nguyên tắc sau để tạo mật khẩu một cách hiệu quả:
- Có chiều dài ít nhất là sáu ký tự, được ưa chuộng nhất là tám ký tự trong đó có ít nhất một ký tự số hay ký tự đặc biệt.
- Chúng phải không tầm thường, một mật khẩu tầm thường là một mật khẩu dễ dàng đoánra và nó thường dựa trên tên, họ, nghề nghiệp hoặc một số đặc biệt cá nhân khác của người sử dụng.
- Chúng nên có hiệu lực trong một giai đoạn, yêu cầu thay đổi mật khẩu mới sau một thờigian đã định.
- Chúng nên được hủy bỏ hay tạo lại sau khi có một số lần thử không thành công.
Chiều dài mật khẩu:
Chiều dài của mật khẩu tối thiểu có thể chấp nhận đựoc mặc định khi bạn cài đặt hệ thống Linux là 6 Điều này nói lên rằng khi một người sử dụng mới thì được phép truycập trên máy server, chiều dài mật khẩu của người sử dụng đó sẽ có tối thiểu là 6 ký tự vànó bao gồm các ký tự, ký số, ký tự đặc biệt v.v Như thế vẫn chưa đủ mà nó phải là 8 Để ngăn chặn những người có tư tưởng không chú trọng đến bảo mật và bắt buộc họ phảidùng chiêu dài password tối thiểu 8 ký tự, người quản trị hệ thống cũng có thể hiệu chỉnh tập tin quan trọng "/etc/login.defs" và thay đổi dòng sau trở thành:
Trang 6PASS_MIN_LEN 6 trở thành
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ênngườ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ẩunà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 racá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, khiphầ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 hệ thống tốc độ nhanh sẽ việc crack các mật khẩu không phải quá khó.Ví dụ: l0phtCrack có thể sử dụng để crack các mật khẩu của Windows, chương trình crack của Alec Mufet có thể sử dụng để crack mật khẩu hệ thống *.nix Việc phá mã đã được phát triển theo thời gian, được viết từ năm 1991 và hiện tại nó đã được phát triển đến phiên bản 5.0a Việc phá mã có thể được cấu hình để tương thích với bất kỳ môi trường nào; các file cấu hình có thể được sửa đổi hỗ trợ cho các định dạng filemật khẩu khác nhau, loại thuật toán mã hoá khác nhau, Việc phá mã sử dụng danh sáchtừ điển như nền tảng cho việc phá mã; các file từ điển này cũng có thể được cấu hình lại một cách dễ dàng Nói chung, để liệt kê danh sách cấu trúc thư mục cho việc thử chương trình, bạn cũng có thể cấu hình tập từ điển hay các luật tạo mã như một phần trong việc phá mã Các luật này có thể bao gồm các phương thức như gắn trước hay sau các ký tự vào các từ chuẩn, gấp đôi hay đảo ngược các từ, thay đổi các ký tự từ thường sang hoa ,hay thay thế một từ này bằng một từ khác Vậy làm cách nào để bảo vệ các mật khẩu trênhệ thống *.nix trong khi file /etc/passwd là file có thể đọc và sự phát triển ồ ạt của các công cụ crack mật khẩu Một vài phương thức cải thiện mật khẩu đã được thực hiện cho phương thức an toàn mật khẩu trong hệ thống *.nix Đầu tiên được giới thiệu là loại mật khẩu bóng (shadow password) Việc chứa các bảng băm mật khẩu trong file đọc được
Trang 7/etc/passwd không an toàn, vì vậy các bảng băm này được đưa vào trong một file riêng rẽ, file /etc/shadow File này chỉ có thể đọc bởi quyền root và vì vậy có khả năng bảo mậttốt hơn Hai file này được sử dụng cùng nhau để cung cấp việc chứng thực cho user Các file mật khẩu bóng đã trở nên thông dụng và được sử dụng mặc định cho rất nhiều hệ thống *.nix như Sun Solaris Tuy nhiên, chúng không phải là mặc định của toàn bộ các hệthống Chẳng hạn với Red Hat Linux, việc sử dụng mật khẩu bóng được lựa chọn trong các bước cài đặt hệ thống Các mật khẩu bóng nên được sử dụng ở bất cứ đâu trong hệ thống Thứ hai, một số 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ằngbấ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ẫumậ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ự phatrộ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)
trong các file từ điển cấu hình)
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ữ Perl Sự cải thiện chính của nó làhỗ trợ cho môi trường NIS và kiểm tra các mật khẩu user chống lại danh sách từ điển vớikhoảng 13 tỷ từ khi được tạo bởi chương trình crack.
Passwd+, được viết bởi Matt Bishop, là một chương trình rất phức tạp, mà giúp bạn cấu
hình một số kiểm tra (dựa trên mô hình mẫu, xâu, số hay ký tự) Mỗi mật khẩu phải thoảmãn toàn bộ các kiểm tra này.Nếu lựa chọn thay thế passwd với các giá trị này (nhìnchung là một ý tưởng tốt) cần cần xem xét một số điểm Đầu tiên, kiểm tra liệu các giá trịpasswd của bạn có hỗ trợ sử dụng mật khẩu bóng; ngoài các file mật khẩu bóng, bạn phảidựa vào độ mạnh của thuật toán mã hoá và độ lớn của mật khẩu (ví dụ như loại bỏ cácmật khẩu yếu) để bảo vệ bạn Thứ hai, nếu bạn đang chạy NIS hay NIS++, đảm bảo rằng
Trang 8phần mềm hỗ trợ chỉ một môi trường; không phải toàn bộ Các mật khẩu bóng có thuậttoán mã hoá mạnh, và có bộ lọc mật khẩu tốt hơn, cung cấp tính năng bảo vệ tốt hơn bằngcách tạo ra độ khó hơn cho kẻ tấn công duy trì và crack mật khẩu của người sử dụng.
3.1.5 Các mối đe doạ khác và các giải pháp
Các mật khẩu tại hệ thống hiện tại có thể được bảo mật tốt hơn, nhưng mối đe doạvẫn tồn tại Điều này đặc biệt đúng với trong các môi trường hệ thống *.nix, có rất nhiềumối đe doạ này dựa trên các chương trình TCP/IP và các giao thức mà không xây dựngcác thuật toán mã hoá hay cơ chế bảo vệ khác Ví dụ: telnet và các lệnh r* (rsh, rlogin, )gửi các mật khẩu dưới dạng text Việc bảo vệ các mật khẩu được mã hoá được chứa trênhệ thống sẽ không còn ý nghĩa nhiều khi bạn truyền các mật khẩu này dưới dạng text quamạng Các giao thức không bảo mật nên được đặt với các giao thức bảo mật thay thế Sửdụng secure shell - ssh, mà các thông tin được mã hoá truyền tới đầu cuối, được thiết kếthay đổi telnet và rsh; secure copy (scp) có thể được sử dụng để thay thế ftp và rcp.OpenSSH là một sản phẩm miễn phí được phát triển như một phần trong toàn bộ dự ánOpenBSD Nó gồm có ssh, scp và các công cụ 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àncho 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:
sử dụng việc mã hoá trong khuôn dạng của một giao thức dạngchallenge/response, vì vậy các mật khẩu không bao giờ được truyền trên mạng
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ựchiệ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ảiphá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ạiviế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ủachươ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ẩucủ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ỗihệ 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ấplú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ạobằng cách đặt thông tin của người sử dụng đó qua một thuật toán bảng băm (như thuật
Trang 9toán MD4 cho S/KEY, MD5 cho OPIE) với số N mật khẩu được tạo N là số lần trongdãy bảng băm để người sử dụng có thể truy cập Mật khẩu kế tiếp được tạo bằng cáchgiảm N đi 1 và đặt thông tin đó trong bảng băm số N-1, và tiếp tục như vậy Với mụcđich chứng thực, khi một người sử dụng đăng nhập vào hệ thống, anh ta sẽ gửi tên truynhập của anh ta tới máy chủ Máy chủ sẽ trả lời theo phương thức challenge, bao gồm tạosố tuần tự của người sử dụng Sau khi người sử dụng gõ mật khẩu và gửi tới máy chủ,nếu mật khẩu trùng với mã mà máy chủ đã tạo trước đó một khoảng thời gian, người sửdụng đó được chấp nhận truy cập hệ thống (Chú ý rằng, mật khẩu này chỉ có giá trị trongmột khoảng thời gian nhất định Và trong khoảng thời gian này, người sử dụng sẽ khôngthể đang nhập lại nếu hệ thống không được thiết lập lại hay khởi tạo lại) S/KEY và OPIEđã thực sự được thiết kế để bảo vệ các kẻ tấn công như replay attack, vì thông tin mậtkhẩu chỉ có giá trị cho mỗi phiên làm việc, nó không thể bị lây bởi một công cụ mạo danhhay sử dụng lại tại thời điểm khác Tuy nhiên, một thông tin mã hoá yếu cũng có thể làmhệ thống như S/KEY hay OPIE có thể có lỗ hổng như một mật khẩu yếu Vì vậy, banđầu, chúng ta cần quay lại nơi mà chúng ta xuất phát: đó chính là sử dụng các mật khẩucó độ dài đủ lớn
3.1.6 Các công cụ:
An toàn của mật khẩu trên các hệ thống *.nix bao gồm 3 khía cạnh chính: Đầu tiên, bạnphải tạo các mật khẩu và các bảng băm với độ khó cho các kẻ tấn công khó có thể phá mãđược Bạn có thể thực hiện điều này sử dụng các file mật khẩu, như hạn chế quyền truycập hơn là thay đổi file chuẩn /etc/passwd file Thứ hai, bạn phải mã hoá mật khẩu khitruyền tin Thay thế các giao thức sử dụng việc chứng thực dạng text với các dạng chứngthực được mã hoá Thứ ba, đảm bảo rằng thuật toán mã hoá, bản thân nó là an toàn.Không có phương thức mã hoá nào là hoàn hảo; Để sử dụng thuật toán mã hoá mạnhnhưng nơi có thể (MD5 hay MD4 hay thủ tục mã hoá crypt) Thậm chí khi bạn sử dụngthuậ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 truycậ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áccô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ữngngườ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ênbản hiện
Crack5.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 Ultrixanlpasswd2.3 Có rất nhiều Website cung cấp, gồm cả server FTP của CERIAS *nix
Trang 10website khác Địa chỉ download:
S/KEY 1.1 (phẩn mềm miễn phí)
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ôngcó 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áytrạ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ủaLinux đượ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 nếu bạn quyết định đặt dòng trên vào trong tập tin "/etc/profile", khi đó việc tự động logout sau 2 giờ nếu không có các hành động nào sẽ được áp dụng cho tất cả mọi người sử dụng trên hệ thống Nếu bạn thích điều khiển việc tự động logout chỉ cho một user cụ thể nào đó bạn có thể đặt biến này trong tập tin riêng ".bashrc" của họ.Sau khi tham số này đã được đặt lại trên hệ thống, bạn phải logout và login lại lần nữa (như root) cho việc thay đổi có tác dụng.
3.2.2 Tập tin "/etc/exports"
Trang 11Nếu bạn đang xuất ra các hệ thống tập tin dùng dịch vụ NFS, thì bảo đảm cấu hình tập tin"/etc/exports" với hạn chế truy cập tối đa Điều này có nghĩa là không dùng các ký tự đại diện (wild-cards), không cho phép root truy xuất ghi, và chỉ mount dưới dạng chỉ đọc khi có thể.Soạn thảo tập tin exports (vi /etc/exports) và thêm vào:
Lấy một ví dụ:
/dir/to/export host1.mydomain.com(ro,root_squash)/dir/to/export host2.mydomain.com(ro,root_squash)
Trong đó "dir/to/export" là thư mục mà bạn muốn xuất ra (export),
host#.mydomain.com là máy được phép login và thư mục, tùy chọn <ro> nghĩa là
mount chỉ đọc và tùy chọn <root_squash> là không cho phép root truy xuất ghi trong
thư mục này.Để việc thay đổi này có tác dụng bạn sẽ cần chạy lệnh sau trên máy trạm củabạn:
[root@deep] # /usr/sbin/exportfs -a
Ghi chú: Bạn nên nhớ rằng, mặc định có một dịch vụ NFS có sẵn trên hệ thống có thể có một rủi ro
về bảo mật
3.2.3 Vô hiệu hóa việc truy cập chương trình console
Trong một môi trường an toàn nơi mà chúng ta chắc chắn rằng console được bảo mật bởi vì các mật khẩu cho BIOS và LILO đã được thiết lập và tất cả các công tắc nguồn và reset của hệ thống đã bị vô hiệu hóa, nó có thể có lợi để vô hiệu hóa hoàn toàn tất cả các console-equipvalent truy xuất tới các chương trình như tắt hẳn hệ thống (shutdown), khởi động lại hệ thống (reboot), và treo hệ thố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.
Trang 12Vô 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", tạo tập tin script disabling.sh (gõ
disabling.sh) và thêm các dòng sau vào bên trong:# !/bin/sh
cd /etc/pam.dfor i in * ; do
sed '/[^#].*pam_console.so/s/^/#/' < $i > foo $$ mv foo $idone
Làm script này có thể thực thi với lệnh sau và thi hành nó:
[root@deep /]# chmod 700 disabling.sh
[root@deep /]# /disabling.sh
Việc này sẽ đánh dấu là dòng ghi chú (comment line) lên tất cả các dòng tham chiếu đến
"pam_console.so" trong tất cả các tập tin nằm trong thư mục /etc/pamd Sau khi script được thi hành, có thể xóa nó khỏi hệ thống.
3.2.4 Tập tin "/etc/inetd.conf"
Inetd cũng được gọi là "super server", sẽ nạp một chương trình mạng dựa trên mộtyêu cầu từ một hệ thống mạng Tập tin "inetd.conf" báo cho inetd biết cổng (port) nào dùng để lắng nghe và server nào khởi động cho mỗi port Việc đầu tiên cần xem xét là khi mà bạn đặt hệ thống Linux của bạn lên bất kỳ mạng nào thì các dịch vụ (service) nào mà bạn cần đưa ra Các dịch vụ mà bạn không cần đưa ra nên vô hiệu hóa và gỡ bỏ, như vậy bạn sẽ có rất ít điều lo ngại về nó, và những kẻ tấn công sẽ có ít cơ hội để tìm kiếm lỗhổng trên hệ thống của bạn Nhìn vào tập tin "/etc /inetd.conf" để xem những dịch vụ nàomà nó được cung cấp bởi chương trình inetd của bạn Vô hiệu hóa những gì mà bạn
không cần bằng cách thêm một dấu # ở ngay đầu dòng, và sau đó gửi đến tiến trình inetd
của bạn một lệnh SIGHUP để cập nhập nó tới tập tin "inetd.conf" hiện hành.
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:ftp, telnet, shell, login, exec, talk, imap, pop-2, finger, auth, v.v trừ khi bạn có kế hoạch dùng nó Nếu nó bị tắt thì nó sẽ bớt rủi ro.
Trang 13#ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a#telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd#shell stream tcp nowait root /usr/sbin/tcpd in.rshd#login stream tcp nowait root /usr/sbin/tcp in.rlogind#exec stream tcp nowait root /usr/sbin/tcpd in.rexecd#comsat dgram udp wait root /usr/sbin/tcpd in.comsat#talk dgram udp wait root /usr/sbin/tcpd in.talkd#ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd#dtalk stream tcp wait nobody /usr/sbin/tcpd in.dtalkd#finger stream tcp nowait root /usr/sbin/tcpd in.fingerd#cfinger stream tcp nowait root /usr/sbin/tcpd in.cfingerd#systat stream tcp nowait guest /usr/sbin/tcpd /bin/ps -auwwx#netstat stream tcp nowait guest /usr/sbin/tcpd /bin/netstat -f inet#auth stream tcp nowait nobody /usr/sbin/in.identd in.identd -| -e -o# End of inetd.conf
Ghi chú: Đừng quên gửi tới tiến trình inetd một tín hiệu SIGHUP (killall -HUP inetd) sau khi thực
hiện các thay đổi trên tập tin inetd.conf Các dịch vụ kích hoạt trên một host được chọn phụ thuộc vàocác chức năng mà bạn muốn host cung cấp Các chức năng có thể hỗ trợ dịch vụ mạng được chọn, các dịch vụ khác được host trên máy tính này, hay việc phát triển và bảo trì của hệ điều hành và các ứng dụng.
[root@deep /]# killall -HUP inetd
Bước 4:
Một biện pháp bảo mật nữa mà bạn có thể áp dụng để bảo mật tập tin "inetd.conf" là đặt nó không thay đổi, dùng lệnh chattr Để đặt tập tin không thay đổi gì, thi hành lệnh sau:
[root@deep /]# chattr +i /etc/inetd.conf
Việc này sẽ ngăn chặn bất kỳ sự thay đổi (xảy ra bất ngờ hay trong các trường hợp khác) với tập tin "inetd.conf" Một tập tin với thuộc tính không thay đổi "i" sẽ làm cho tập tin không thể hiệu chỉnh, xóahay đổi tên, không có mối liên kết nào có thể được tạo cho tập tin này và không dữ liệu nào có thể được ghi đến nó Chỉ có một người có thể đặt hay xóa thuộc tính này là super-user root.
Nếu bạn muốn hiệu chỉnh tập tin inetd.conf bạn sẽ cần phải gỡ bỏ cờ hiệu không được thay đổi :- Để gỡ cờ hiệu không được thay đổi, đơn giản thi hành lệnh sau:
[root@deep /]# chattr -i /etc/inetd.conf
3.2.5 TCP_WARPPERS
Mặc nhiên Red Hat Linux cho phép tất cả các yêu cầu dịch vụ Dùng TCP_WARPPERS thực hiện bảo mật các máy server của bạn để chống sự xâm phạm từ bên ngoài thì đơn giản và dễ dàng hơn rất nhiều những gì bạn suy nghĩ Từ chối tất cả các host bằng cách đặt "ALL:ALL@ALL, PARANOID" trong tập tin "/etc/hosts.deny" và đồng thời liệt kê tường minh danh sách các host đáng tin cậy đã được phép truy cập tới máy của bạn vào trong tập tin "/etc/hosts.allow" Đây là cách cấu hình an toàn tốt nhất TCP_WRAPPERS được điểu khiển từ hai tập tin và việc tìm kiếm dừng lại ở lần thấy đầu tiên.
/etc/hosts.allow/etc/hosts.deny
Trang 14- Quyền truy cập được gán khi một cặp (daemon, client) xứng hợp với một mục trong tập tin /etc/hosts.allow.
- Bằng không, quyền truy cập bị từ chối khi một cặp (daemon, client) xứng hợp với một mục trong tập tin /etc/hosts.deny.
- Còn lại, quyền truy cập sẽ được gán.
Bước 1:
Soạn thảo tập tin hosts.deny (vi /etc/hosts.deny) và thêm vào các dòng sau:
Access is denied by default.# Deny access to everyone.
ALL: ALL@ALL, PARANOID # Matches any host whose name does not# match its address, see bellow
Điều này có ý nghĩa cho tất cả các dịch vụ, tất cả các vị trí, do vậy bất kỳ dịch vụ nào đềubị ngăn chặn lại, trừ khi chúng được phép truy cập một cách tường minh bởi các mục trong tập tin allow.
Ghi chú: Về tham số "PARANOID"; Nếu có ý định muốn chạy các dịch vụ telnet hoặc ftp
trên máy server, đừng quên thêm vào tên máy client và địa chỉ IP trong tập tin " / etc / hosts" trên server hay có thể chờ đợi trong nhiều phút cho việc tìm kiếm DNS tới thời giantime out, trước khi có được một dấu nhắc login.
Bước 2:
Soạn thảo tập tin hosts.allow (vi /etc/hosts.allow) và giả sử thêm vào dòng sau:
# Host được ủy quyền rõ ràng thì được liệt kê trong tập tin allow.# Như ví dụ sau:
Ghi chú: Các thông điệp lỗi trông giống như thế này: warning: / etc / hosts.allow, line
6: can't verify hostname: gethostbyname(win.openna.com) failed Nếu nhận kiểu thông điệp lỗi này, hãy kiểm tra trong tập tin cấu hình DNS để biết sự tồn tại của hostname.
Đừng để hiển thị các tập tin thông tin hệ thống Nếu không muốn hiển thị các tập tin thông tin hệ thống khi mọi người log-in từ xa, ta có thể thay đổi tùy chọn telnet trong tập tin "/etc/inetd.conf" trông giống như thế:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h
Thêm vào cờ hiệu "-h" ở cuối dòng lệnh sẽ cho daemon không hiển thị bất kỳ thông tin hệ thống nào và chỉ hiện dấu nhắc login cho người sử dụng Mẹo vặt này chỉ cần thiết nếudùng một telnet daemon trên máy server (khuyên dùng SSH).
3.2.6 Tập tin "/etc/host.conf"
Linux sử dụng một thư viện phân giải để lấy một địa chỉ IP tương ứng với một host name Tập tin "/etc/host.conf" chỉ rõ các tên được phân giải như thế nào Các mục trong tập tin "etc/host.conf" để bảo các thư viện phân giải các dịch vụ nào cần dùng, và sắp theo thứ tự nào để phân giải các tên.
Soạn thảo tập tin host.conf (vi /etc/host.conf) và thêm vào các dòng sau:
Trang 15# Lookup names via DNS first then fall back to /etc/hosts.order bind,hosts
# We have machines with multiple IP addresses.multi on
# Check for IP address spoofing.nospoof on
Tùy chọn order chỉ rõ thứ tự của các dịch vụ Ví dụ mẫu này chỉ rõ ràng như việc phân giải đầu tiên
nên tham khảo các name server để phân giải một tên (name) và sau đó kiểm tra tập tin "/etc/hosts" Đểđạt hiệu quả cao và bảo mật tốt hơn thì nên đặt thư viện phân giải theo thứ tự đầu tiên là kiểm tra name server (bind) sau đó tập tin hosts (hosts) cho việc thực thi và bảo mật được tốt hơn trên tất cả cácmáy server Dĩ nhiên phải có phần mềm DNS/BIND được cài đặt sẵn hay việc cấu hình sẽ không làm
việc Tùy chọn multi xác định một host trong tập tin "/etc/hosts" có thể có nhiều địa chỉ IP (multiple
interface ethN) Các host mà có nhiều hơn một địa chỉ IP được biết đến là multiomed, bởi vì sự hiện diện của nhiều địa chỉ IP bao hàm rằng host có nhiều giao tiếp mạng Lấy một ví dụ, một Gateway
Server sẽ luôn có nhiều địa chỉ IP và phải có tùy chọn này được đặt là ON Tùy chọn nospoof chỉ rõ
hãy cẩn thận không được phép ngụy trang trên máy này IP-Spoofing là môt thành tích bảo mật chói lọi, nó làm việc bởi các mẹo văt máy tính trong một mối quan hệ đáng tin cậy mà bạn là một người nào đó mà thật sự không phải vậy Trong loại hình tấn công này, một máy được cài đặt như một serverhợp pháp và khi đó sinh ra các kết nối và các loại hoạt động mạng khác tới các hệ thống đầu cuối hợp pháp, các server khác hay các hệ thông lưu trữ dữ liệu lớn Tùy chọn này phải được đạt ON cho tất cả các loại server.
3.2.7 Tập tin "/etc/services"
Các số cổng (port number) được dùng cho các dịch vụ chuẩn được đưa ra trong RFC 1700 "Assigned Numbers" Tập tin "/etc/services" cho phép các chương trình server và client để chuyển đổi tên dịch vụ tới các số port này Danh sách này thì được lưu giữ trong mỗi host trong tập tin "/etc/services" Chỉ người sử dụng "root" là được phép thay đổi nội dung tập tin này và rất hiếm khi phải chỉnh sửa tập tin "/etc/services" để tạo sự thay đổi kể từ khi nó đã chứa đựng nhiều tên dịch vụ tương ứng tới các số port Để cải tiến việc bảo mật, chúng ta có thể làm tập tin này trở nên không bị chỉnh sửa (immunize) để ngăn chặn việc xóa hay thêm vào các dịch vụ mà không được ủy quyền.
- Để định cho tập tin "/etc/services" không thay đổi, dùng lệnh:
[root@deep /]# chattr +i /etc/services
3.2.8 Tập tin "/etc/securetty"
Tập tin "/etc/securetty" cho phép bạn chỉ rõ các thiết bị TTY nào mà người sử dụng "root" được phép
login vào Tập tin "/etc/securetty" được đọc bởi chương trình login (thường là "/bin/login") Định dạngcủa nó là một danh sách các tên thiết bị tty được phép và đối với tất cả các thứ khác thì được chú giải hoặc không xuất hiện trong tập tin này, đăng nhập với root thì không được phép.
Vô hiệu hóa bất kỳ tty mà bạn không cần đến bằng cách đặt dấu chú giải (#) cho chúng (dấu # ở đầu dòng).
Chỉnh sửa tập tin securetty (vi /etc/securetty) và đặt dấu chú giải lên các dòng sau:
tty1#tty2#tty3#tty4
Trang 16Có nghĩa là root chỉ được phép login vào tty1 Đây là lời khuyên của chúng tôi, cho phép "root" chỉ login vào môt thiết bị tty và dùng lệnh "su" để chuyển sang "root" nếu bạn cần nhiều quyền hơn Các thiết bị phải log-in như "root"
3.2.9 Các tài khoản đặc biệt:
Có một điều quan trọng là cần vô hiệu hóa tất cả các tài khoản mặc định của
nhà sản xuất mà không dùng trong hệ thống (một số tài khoản tồn tại mặc nhiên ngay cả
khi không cài đặt các dịch vụ liên quan trên máy server) Việc này nên được kiểm tra sau mỗi lần nâng cấp hay cài đặt phần mềm mới Linux cung cấp các tài khoản này cho các hoạt động hệ thống khác nhau,có thể không cần nếu các dịch vụ không được cài đặt trên hệ thống server Nếu không cần các tài khoản nào, thì xóa chúng ta có càng nhiều tài khoản thì việc truy cập hệ thống sẽ dễ dàng hơn Để xóa người sử dụng trên hệ thống, dùng lệnh:
[root@deep /]# userdel username
- Để xóa nhóm người sử dụng trên hệ thống của bạn, dùng lệnh:
[root@deep /] # groupdel groupname
[root@deep /]# userdel games (Xóa user này khi không dùng X Window).
[root@deep /]# userdel gopher
[root@deep /]# userdel ftp (Xóa user này khi không dùng ftp anonymous server).
Ghi chú: Mặc định, lệnh "userdel" sẽ không xóa một thư mục home của người sử dụng
Nếu muốn thư mục home của các tài khoản cũng được xóa, thì phải thêm tùy chọn "-r" vào lệnh userdel.
Bước 2:
Gõ các lệnh sau trên máy terminal để xóa nhóm các người sử dụng được liệt kê bên dưới:
[root@deep /]# groupdel adm[root@deep /]# groupdel Ip[root@deep /]# groupdel news[root@deep /]# groupdel uucp
[root@deep /]# groupdel games (Xóa group này khi khong dùng X Window).
[root@deep /]# groupdel dip[root@deep /]# groupdel ppusers
[root@deep /]# groupdel popusers (xóa group này khi không dùng pop server cho email).
[root@deep /]# groupdel slipusers
Bước 3:
Thêm các người sử dụng cần thiết vào hệ thống:
[root@deep /]# useradd admin
Trang 17[root@deep /]# passwd admin
Bước 4:
Bit không thay đổi có thể được dùng để ngăn chặn việc xóa ngẫu nhiên hay ghi chồng lênmột tập tin cân được bảo vệ Nó cũng ngăn chặn một ai đó tạo một biểu tượng liên kết tớitập tin này, mà nó là nguồn tấn công xoay quanh việc xóa "/etc/passwd", "/etc/group" hay"/etc/gshadow".
- Để đặt bit không thay đổi trên các mật khẩu và các nhóm tập tin , dùng lệnh sau:
[root@deep /[# chattr +i /etc/passwd[root@deep /[# chattr +i /etc/shadow[root@deep /[# chattr +i /etc/group[root@deep /[# chattr +i /etc/gshadow
Ghi chú: Trong tương lai, nếu có ý định thêm hay xóa các người sử dụng, tập tin
passwd, các nhóm người sử dụng, hay các tập tin group, thì phải gõ bỏ bit không làm thay đổi trên tất cả các tập tin đó, nếu không sẽ không thể thay đổi được gì Nếu như ta cũng có dự định cài đặt một chương trình RPM sẽ tự động thêm một người sử dụng mới vào các tập tin passwd hay group đã đặt bit không thay đổi, ta sẽ nhận được một thông điệp lỗi suốt quá trình cài đặt, khi không gỡ bỏ bit không làm thay đổi từ các tập tin đó.
3.2.10 Ngăn chặn bất kỳ người sử dụng nào chuyển thành root bằng lệnh "su".
Lệnh su cho phép trở thành những người sử dụng tồn tại trên hệ thống, Ví dụ có thể trở thành "root" tạm thời và thi hành các lệnh như một super-user "root" Nếu không muốn bất kỳ ai chuyển thành root hay hạn chế "su" với một số người sử dụng nào đó, ta thêm vào hai dòng như sau vào đầu tập tin cấu hình "su" trong thư mục "/etc/pam.d" Nên giới hạn những người được phép chạy lệnh "su"để thành tài khoản root.
Bước 1:
Soạn thảo tập tin su (vi /etc/pam.d/su) và thêm vào hai dòng sau vào phía trên đầu tập tin:
auth sufficient /lib/security/pam_rootok.so debugauth required /lib/security/pam_wheel.so group=wheel
Sau khi thêm vào các dòng trên, tập tin "/etc/pam.d/su" sẽ trông giống như thế này:#%OAM-1.0
auth sufficient /lib/security/pam_rootok.so debugauth required /lib/security/pam_wheel.so group=wheelauth required /lib/security/pam_pwdb.so shadow nullokaccount required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so shadow use_authtok nulloksession required /lib/security/pam_pwdb.so
session optional /lib/security/pam_xauth.so
Có nghĩa là chỉ có những người sử dụng là thành viên của nhóm "wheel" có thể dùng
lệnh su chuyển thành root; nó cũng bao gồm logging.Chú ý rằng nhóm "wheel" là một tàikhoản đặc biệt trên hệ thống mà cũng có thể được dùng cho mục đích này Không thể dùng bất kỳ tên nhóm để thực hiện mánh khóe này Mánh khóe này được kết hợp với việcchỉ rõ các thiết bị TTY nào mà root được phép login vào sẽ cải tiến rất nhiều việc bảo mật trên hệ thống.
Trang 183.2.11 Securing Your Files
Bảo mật từ cấp độ quyền truy cập file Khi không muốn sự tò mò từ những người khác, ta có thể tạo file mặt nạ để có quyền bảo mật file tối đa Tất nhiên việc bảo mật này chỉ có ý nghĩa khi có nhiều hơn một người sử dụng trong hệ thống Khi có rất nhiều người sử dụng thì chỉ để quyền đọc ghi và không để bất kỳ quyền nào cho các user khác.
3.2.12 Bảo vệ thư mục trên web server
Nhiều web servers, trong đó có Apache thường dùng file htaccess để bảo vệ các thư mục trên web server Nếu một thư mục nào đó trên web server có lưu file htaccess, khi duyệt qua thư mục này, web server sẽ popup một hộp thoại yêu cầu nhập username vàmật khẩu Chỉ khi nào nhập vào một username và mật khẩu đúng, ta mới có thể xem đượctrong thư mục đó có những gì Danh sách các username và mật khẩu của htaccess thườngđược lưu trong file htpasswd Tại sao phải dùng dấu chấm ở trước trong tên file
'.htaccess' Các file có tên bắt đầu là một dấu chấm '.' sẽ được các web servers xem như làcác file cấu hình Các file này sẽ bị ẩn đi(hidden) khi bạn xem qua thư mục đã được bảo vệ bằng file htaccess
Bước 1: chuẩn bị username và mật khẩu cho htaccess[đt@localhost /]# htpasswd -c /users vicki
New password: tytRe-type new password: tytAdding password for user vicki-c để tạo file mới
Sau khi chạy dòng lệnh trên, trong thư mục hiện tại sẽ xuất hiện file users với nội dung như sau:
File lưu username và mật khẩu có dạng như sau:<username1>:<encrypted-password1>
DES được dùng rất phổ biến trên Unix/Linux(*nix), đặc biệt là trong các files /etc/passwd hoặc /etc/shadow DES rất khó bị crack
code sau để encrypt:
$encpass = &encrypt($password);
sub encrypt {
my($plain) = @_;my(@salt);
Trang 19@salt = ('a' 'z', 'A' 'Z', '0' '9', '.', '/'); srand(time() ^ ($$ + ($$ << 15)) );
return crypt($plain, $salt[int(rand(@salt))] $salt[int(rand(@salt))] );}
Bước 2: tạo 1 file htaccess với nội dung như sau:AuthName "Khu vực cấm"
AuthType Basic
AuthUserFile /somepaths/usersrequire user vicki
# nếu bạn đang dùng Apache Server, hãy thêm các dòng sau vào# để ngăn chặn users download các files htaccess & htpasswd<files htaccess>
Order allow,deny Deny from all</files>
<files htpasswd> Order allow,deny Deny from all</files>
AuthName "Khu vực cấm" // tiêu đề của hộp thoại sẽ được popup
AuthUserFile /var/www.users // đường dẫn đầy đủ đến file lưu username & mật khẩurequire user vicki // danh sách các username được phép
Bước 3: tạo 1 thư mục trên web server, chẳng hạn như 'security', upload file htaccess vàothư mục này, chmod 644 cho file htaccess và users Thử upload vài files khác vào 'security'
Bước 4: mở trình duyệt web và vào thư mục 'security', http://localhost/security/ sẽ nhận được một hộp thông báo yêu cầu nhập username & password Thử dùng username=vicki & password=tyt, sẽ thấy được các files trong 'security' directory.
Hack htaccess & htpasswd
1/ Một số người sơ ý không chmod đúng cho files htaccess và htpasswd Vì vậy hacker có thể dễ dàng download chúng về máy tính của mình Sau đó hacker tìm một công cụ crack DES bằng tự điển như John the Ripper hoặc CrackJack để crack file htpasswd2/ Sử dụng các công cụ hack tự động
hacker có thể sử dụng WWWHack (http://www.wwwhack.com/) hoặc Brutus
(http://www.hoobie.net/brutus) để hack các websites được bảo vệ bằng files htaccess và htpasswd Đây là các công cụ tấn công bằng tự điển gọn nhẹ nhưng đa năng, có hổ trợproxy, rất dễ sử dụng Tuy nhiên, nếu password quá khó hoặc tốc độ đường truyền của websites không tốt, phải hàng giờ để WWWHack hoặc Brutus hoàn thành nhiệm vụ WWWHack và Brutus làm việc như thế nào? DES(Data Encryption Standard) dường nhưrất khó bị crack, chỉ có một cách duy nhất và cũng là dễ nhất là dùng tự điển WWWHackvà Brutuslàm việc gần giống như nhau Chúng sẽ chọn một password bất kì trong tự điển,sau đó gởi đến website Nếu nhận được HTML status code 401 - Authorization Required,
Trang 20"Access Denied", "Enter your password again" cú nghĩa là password khụng đỳng, chỳng sẽ thử lại với một password khỏc cú trong tự điển Nếu nhận được HTML status code 200OK, cú nghĩa là password đỳng, hay núi cỏch khỏc là đó bị crack.
3.2.13 XWindows SecurityMotivation / introduction.
Tính bảo mật của XWindows rất kém Trên một mạng máy tính Unix, bất cứ aicũng có thể kết nối và mở một màn hình X, đọc các cú gõ phím, chụp trạng thái mànhình, chạy các ứng dụng không đợc bảo vệ Dù rằng đấy là những sự việc đợc cảnhbáo nhiều trong thế giới bảo mật Unix
How open X displays are found.
Làm thế nào để mở một cửa sổ XWindows từ xa? Nếu Server không bị DisabledXWindows thì ta chỉ việc gõ lệnh:
phát hiện ra các Server nào đang chạy X bằng vô số các Tool trên Internet (NSS).
The localhost problem
Chạy màn hình X với sự điều khiển truy nhập đợc cho phép bởi lệnh "xhost -" sẽbảo vệ từ XOpenDisplay thông qua Port 6000, đó cũng chính là cách mà các Hackercó thể qua mặt các hệ thống bảo vệ Nếu bạn có thể đăng nhập vào mục tiêu cần tấncông, thì bạn có thể kết nối tới X của local-host Cách này thật đơn giản, chỉ bằng vàidòng lệnh bạn có thể dump xuống đợc trạng thái màn hình X của Host cần tấn công:
$ rlogin target
$ xwd -root -display localhost:0.0 > ~/snarfed.xwd$ exit
$ xwud -in ~/snarfed.xwd
Dĩ nhiên, trong trờng hợp này bạn phải có một Acc hợp lệ trên hệ thống cần Attack,phải đăng nhập đợc vào hệ thống và quan trọng là hệ thống đó phải chạy X Ngoàiviệc Dump màn hình, bạn còn có thể run đợc các ứng dụng ko đợc bảo vệ trên XServer và chụp các cú gõ phím trên X Server
Snooping techniques - dumping windows
Cách đơn giản nhất để chụp, dump vào các màn hình X từ các X Server là cáchsử dụng công cụ xwd.
Xwd: Là một công cụ phục vụ việc dump xuống các màn hình X Nó cho phép Xusers
chụp lại các trạng thái của màn hình X rồi lu dới định dạng đặc biệt Cửa sổ cần chụpsẽ đợc lựa chọn bởi một cú nhấn Mouse Nó còn có thể chụp ngay cả các cú gõ bàn
phím Một công cụ khác là xwud Ngoài các tính năng nh xwd nó còn có khả năng
đọc các file dump đợc lu giữ bởi các định dạng của các Tool khác Bây giờ chúng tacùng xem xét dump màn hình X bằng cách sử dụng kết hợp: xwd và xwud.
Để dump toàn bộ màn hình X từ một host ta dùng lệnh:
$ xwd -root localhost:0.0 > file
Trang 21Để xem những kết quả vừa thu đợc ở trên chúng ta cần phải đọc nó bằng lệnh:
$ xwud -in file
Những cửa sổ Xterm thì hơi khác Bạn không thể chỉ rõ tên cũng nh sau đó dump nóxuống Tuy nhiên để dump Xternm bạn gõ lệnh:
$ xwd -name xterm
Toàn bộ cửa sổ X và Xternm sẽ đợc dump xuống và đọc bởi xwud.
Snooping techniques - reading keyboard
Nếu có thể kết nối đến một màn hình Ta cũng có thể log vào hệ thống cũng nhcó thể chộp đợc những cú nhấn phím trên X Server Một chơng trình lu hành trênmạng, gọi xkey Chơng trình đó có tên ttysnoop.c
Nh đã nói, các Hacker còn có thể đọc các cú nhấn phím của các cửa sổ đặc biệt.Chẳng hạn nh cửa sổ ID đặc biệt của Root có thể đợc tóm bởi cách gọi hàmXquerryTree() Thờng thì Windows Manager thờng đợc dùng để điều khiểnWindows-ID, cũng nh những cú nhấn phím trong những khoảng thời gian xác định.Việc sử dụng Windows Manager kết hợp với chức năng Xlib, những cú nhấn phím cóthể đợc tóm và KeySyms có thể đợc biến chuyển vào những đặc tính bởi cách tiếp tụcgọi đến Xlookstrin Thậm chí hacker có thể gửi Keysims đến cho một cửa sổ Hackerkhông chỉ rình mò trên các hoạt động của nạn nhân, còn có thể gửi những sự kiện bànphím tới các quá trình, tơng tự nh là dùng bàn phím trên chính máy đó vậy! Hackercó thể đọc và ghi các sự kiện gõ phím của một cửa sổ Xtern từ xa.
Trojan X clients - xlock and X based logins
Bạn có nghĩ đến một chơng trình thích hợp hơn để thiếp lập một chú ngựa thànhTrojan chop mật khẩu tốt hơn xlock? Với vài dòng thêm vào xlock.c , password mỗingời dùng sử dụng phiên bản Trojan biến thể của xlock có thể đợc lu giữ trong mộtfile và đợc sử dụng sau này bởi các Hacker Nếu một User có một th mục HomeDirectory có thể viết (./home) trong biến môi trờng đờng dẫn của mình, thì rất dễ bịtấn công kiểu này Để lấy đợc Password của họ hacker chỉ việc đặt phiên bản Xlockbiến thể (Trojan) vào Home Directory của họ và chờ hứng Password thôi Thờng thìtrong trờng hợp này User không biết đợc rằng mật khẩu của mình đã bị tóm Các biếnthể mang tính Trojan của Xlock cũng nh các chơng trình khác nh login Có rất nhiềutrên các Site Hacking Unix.
3.2.14 TĂNG CƯỜNG AN NINH CHO KERNEL
Mặc dự thừa hưởng những đặc tớnh của hệ thống UNIX và khỏ an ninh hơn một số hệ điều hành khỏc, hệ thống GNU/Linux hiện nay vẫn tồn tại những nhược điểm sau:o Quyền của user ‘root’ cú thể bị lạm dụng User ‘root’ cú thể dễ dàng thay
đổi bất kỳ điều gỡ trờn hệ thống.
o Nhiều file hệ thống cú thể dễ dàng bị sửa đổi Nhiều file hệ thống quan trọng như /bin/login cú thể bị sửa đổi bởi hacker để cho phộp đăng nhập khụng cần mật khẩu Nhưng những file loại này lại hiếm khi nào thay đổi trừ phi khi nõng cấp hệ thống.
là một thiết kế tốt để tăng cường tớnh uyển chuyển, linh hoạt cho kernel Nhưng sau khi một module được nạp vào kernel, nú sẽ trở thành một phầncủa kernel và cú thể hoạt động như kernel nguyờn thủy Vỡ vậy, cỏc chưng trỡnh mục đớch xấu cú thể được viết dạng module và nạp vào kernel, rồi sau đú hoạt động như một virus.
thành mục tiờu bị tấn cụng của hacker sau khi thõm nhập hệ thống.
Trang 22Để cải thiện tính an ninh cho các server Linux, chúng ta cần có một kernel an toàn hơn Điều này có thể thực hiện được bằng cách sửa đổi kernel nguyên thuỷ bằng các ‘patch’ tăng cường tính an ninh cho hệ thống Các patch này có các tính năng chính yếu sau:
o Bảo vệ – bảo vệ các file hệ thống quan trọng khỏi sự thay đổi ngay cả với user root Bảo vệ các process quan trọng khỏi bị ngừng bởi lệnh ‘kill’ Chặn các tác vụ truy cập IO mức thấp (RAW IO) của các chương trình không được phép.
o Phát hiện – Phát hiện và cảnh báo với người quản trị khi server bị scan Cũng như khi có các tác vụ trên hệ thống vi phạm các luật (rules) định trước.
o Đối phó – Khi phát hiện sự vi phạm trên hệ thống, các ghi nhận chi tiết sẽ được thực hiện cũng như có thể ngừng lập tức phiên làm việc gây raMột vài công cụ sửa đổi kernel được sử dụng rộng rãi là LIDS (Linux Intrusion DetectionSystem), Medusa,
3.2.15 AN TOÀN CHO CÁC GIAO DỊCH TRÊN MẠNG
Có rất nhiều dịch vụ mạng truyền thống giao tiếp thông qua giao thức văn bản không mã hoá, như TELNET, FTP, RLOGIN, HTTP, POP3 Trong các giao dịch giữa người dùng với máy chủ, tất cả các thông tin dạng gói được truyền qua mạng dưới hình thức văn bản không được mã hoá Các gói tin này có thể dễ dàng bị chặn và sao chép ở một điểm nào đó trên đường đi Việc giải mã các gói tin này rất dễ dàng, cho phép lấy được các thông tin như tên người dùng, mật khẩu và các thông tin quan trọng khác Việc sử dụng các giao dịch mạng được mã hoá khiến cho việc giải mã thông tin trở nên khó hơn và giúp bạn giữ an toàn các thông tin quan trọng Các kỹ thuật thông dụng hiện nay là IPSec, SSL, TLS, SASL và PKI Quản trị từ xa là một tính năng hấp dẫn của các hệ thống UNIX Người quản trị mạng có thể dễ dàng truy nhập vào hệ thống từ bất kỳ nơi nào trên mạng thông qua các giao thức thông dụng như telnet, rlogin Một số công cụ quản trị từ xa được sử dụng rộng rãi như linuxconf, webmin cũng dùng giao thức không mã hoá Việc thay thế tất cả các dịch vụ mạng dùng giao thức không mã hoá bằng giao thức có mã hoá là rất khó Tuy nhiên, bạn nên cung cấp việc truy cập các dịch vụ truyền thống như HTTP/POP3 thông qua SSL, cũng như thay thế các dịch vụ telnet, rlogin bằng SSH
3.2.16 Open SSH
Giới thiệu.
Open SSH là một chương trình mã nguồn mở (Open Source) được sử dụng để Encrypt (mã hoá) các giao dịch giữa các Host với nhau bằng cách sử dụng Secure Shell (SSH) Nó là một sự thay thế an toàn cho những chương trình được sử dụng để kết nối như: Telnet, rlogin, rsh Bởi nó luôn luôn Encrypt tất cả các giao dịch, ẩn đi, che dấu User và Password được sử dụng cho những phiên đăng nhập từ xa Sau khi phiên đăng nhập được thực hiện, nó sẽ tiếp tục Encrypt tất cả những dữ liệu giao dịch giữa 2 Host Dự án OpenSSH được phát triển dựa trên nền tảng của dự án Open BSD (một OS thuộc
Trang 23họ Unix) Nó được thiết kế để sử dụng những thuật toán mã hoá mạnh để nâng cao tính an toàn và ngăn chặn sự phá hoại của các Hacker Mặc dù nó được xây dựng và phát triểnbởi nền tảng OpenBSD Nhưng nó cũng có khả năng tương thích vag có thể hoạt động trên hầu hết các OS thuộc dòng họ Unix: Linux, HP-UX, AIX, Irix, SCO, MacOS X, Cygwin, Digital Unix/Tru64/OSF, SNI/Reliant Unix, NeXT, Solaris
OpenSSH không phải là một chương trình Nó là một bộ các chương trình kết nối an toàn:
- OpenSSH Client (ssh): Chương trình được sử dụng cho các đăng nhập từ xa Với sự an toàn và Encrypt trong mỗi phiên đăng nhập ở mức độ cao Nó là sự thay thế an toàn cho: rlogin và telnet đã tỏ ra lỗi thời và kém an toàn
- Secure Copy Program (scp): Được sử dụng cho việc Copy file từ xa, Copy các file từ các Host khác nhau trên Internet Nó hỗ trợ User và Password.
- Secure File Transfer Program (sftp): Được sử dụng để phục các yêu cầu FTP một cách an toàn
- OpenSSH Deadmon (shhd): Đặc OpenSSH chạy ở chế độ Deadmon trên các hệ thống Unix.
Trên đây là những Tools chính không thể thiếu trong bộ OpenSSH Ngoài ra còn rất nhiều Tools, Plugin, Addin nữa
Cài đặt
Để lấy OpenSSH lên Homepage: http://www.openssh.org
Down một Version phù hợp với hệ thống của mình Dùng Linux sẽ Down gói *.rpm Sau đó phát lệnh:
root@domain.com#: rpm -Uvh *.rpm
Nếu bạn sử dụng các hệ thống khác thì việc cài đặt nó cũng tương tự Bạn Down gói phù hợp với hệ thống của mình Nó có thể là *.tar, *.tar.gz, *.gz etc Bung nén nó vào một thư mục.
root@domain.com #: /configureroot@domain.com #: makeroot@domain.com #: make install
Các tính nổi bật của Open SSH
Open SSH cung cấp khá nhiều tính năng để giúp cho việc truyền thông giữa 2 Host trở lên an toàn Dưới đây là một số tính nổi bật:
Khả năng mã hoá mạnh bởi việc sử dụng chuẩn mã hoá 3 DES và Blowfish: Cả 2
chuẩn mã hoá trên đều đuợc cung cấp miễn phí và sử dụng rộng rãi ở nhiều nước trên thế giới 3DES cung cấp khả năng mã hoá chứng thực thời gian Blowfish cung cấp khả năngmã hoá nhanh hơn Cũng như những chuẩn mã hoá khác cả 2 chuẩn nêu trên đều cung cấp khả năng mã hoá các dữ trước khi nó được đưa vào đường truyền một cách an toàn.
Khả năng chứng thực mạnh bởi việc sử dụng các cơ chế Public Key, OPTs (One Time
Password), Keberos: Có tác dụng bảo vệ chống lại tính dễ tổn thương trong quá trình chứng thực bởi việc khai thác và sử dụng các kỹ thuật như: IP Spoof, DNS Spoof, Fake Router…Có 4 phương pháp chứng thực được Open SSH sử dụng :
- Chỉ chứng thực Public Key
- Sự chứng thực Host bởi việc sử dụng Public Key kết hợp với rhost- Sự chứng thực dựa trên OPTs kết hợp với s/key
Trang 24- Sự chứng thực dựa trên cơ chế Keberos
Mã hoá giao thức X11 cho việc sử dụng X Windows: Mã hoá dữ liệu trong quá trình
sử dụng X Windows giữa 2 Host Được sử dụng để chống lại những cuộc tấn công từ xa nhằm vào xterm như Snooping, Hjacking…
Mã hoá cho quá trình chuyển đổi cổng (Port Forwarding): Cho phép quá trình chuyển
đổi các Port TCP/IP tới một hệ thống khác thông qua một kênh được mã hoá Nó được sửdụng cho những giao thức Internet chuẩn không cung cấp khả năng mã hoá dữ liệu trên đường truyền như: SMTP, POP, FTP, Telnet…
Đại diện chuyển tiếp cho những đăng nhập vào các mạng đơn: Một Key chứng thực
của người dùng có thể và thường được lưu giữ trên PC của họ, nó có thể trở thành một trạm đại diện chứng thực Khi người sử dụng hệ thống truy cập từ một hệ thống mạng khác Kết nối của họ sẽ được chuyển tới cho trạm đại diện chứng thực này Nó có tác dụng cho phép người sử dụng truy cập đến hệ thống của bạn một cách an toàn từ bất kỳ hệ thống nào.
Nén dữ liệu: Cung cấp khả năng nén dữ liệu một cách an toàn Nó rất có ý nghĩa trên
những hệ thống mạng không được nhanh.
Chứng thực chung cho Keberos và Andrew File System bằng cách sử dụng Ticket:
Những người sử dụng Keberos và AFS sẽ được cung cấp một Password chung để sử dụng và truy cập 2 dịch vụ trên trong một thời gian nhất định.
Nguyên lý hoạt động của Open SSH
Trước hết chúng ta cùng tìm hiểu về cơ chế chứng thực cho các lệnh *r (rlogin, rsh, rcp) Khi sử dụng rlogin, điều kiện đầu tiên là người dùng đó phải có một Acc trên hệthống mà họ muốn đăng nhập từ xa đó Chẳng hạn trên hệ thống có Acc phongnv Nếu Log vào trên hệ thống cục bộ khi kết nối tới một Host từ xa sẽ không có bất cứ yêu cầu hỏi Password nào khi truy nhập vào hệ thống từ xa Đơn giản bởi Acc phongnv đã được xác nhận bởi file rhost đươc đặt trong thư mục /home/phonnv trên hệ thống từ xa File rhost chứa đựng Hostname và Username yêu cầu cho các Acc cần để sử dụng đăng nhập tới hệ thống Chẳng hạn Hostname của ta là vnzone.net và Username là phongnv Để truy cập đến hệ thống không cần Passowd thì các thông tin về mình trong file rhost có dạng như sau:
Hostname Username
Đối với Hostname phải là Hostname đầy đủ của hệ thống Đối với User phải là các User hợp lệ đang tồn tại trên hệ thống mà bạn muốn định nghĩa Một ví dụ cụ thể: nếumuốn sử dụng rlogin thì Admin phải tạo một file rhost trong /home/phongnv với nội dung:
Trang 25hình trong file /etc/xinet.d , để vô hiệu hoá các r Service:
- Bạn dùng vi, emacs…hay bất cứ trình soạn thảo văn bản nào mà bạn muốn để mở /etc/init.d/xinet.d
- Tìm đoạn “service login“ xoá chúng đi Ghi lại mọi sự thay đổi và thoát trình soạn thảo.- Khởi động lại xinetd.d Deadmon : /etc/init.d/xinet.d restart
- Nếu có thể bạn hãy vô hiệu hoá luôn Telnet Service bằng cách trên Sau đó thay thế chúng bằng Open SSH.
Chúng ta đã tìm hiểu qua nguyên lý hoạt động của r Service Bây giờ chúng ta sẽ tìm hiểu về nguyên lý hoạt động của Open SSH Điều đầu tiên khẳng định là : Open SSH cung cấp một cơ chế chứng thực khá an toàn bởi việc sử dụng những Public Key Các Public Key lại tiếp tục sử dụng các Public Key hay Private Key cho sự chứng thực an toàn Các Private Key chỉ được sử dụng bởi người dùng, còn Public Key có thể được sử dụng bởi mọi người Muốn Open SSH tạo ra các DSA Private/Public Key bạn dùng lệnh:shh-keygen -d
Các DSA Private Key thường được lưu trữ ở /root/.ssh/id_dsa file Còn các DSA Public Key thường được lưu trữ ở /root/.ssh/id_dsa.pub … Các Public Key cần phải được đổi tên và Copy đến thư mục thích hợp trên hệ thống ở xa muốn sử dụng Open SSH Dưới đây liệt kê vị trí cũng những Public Key mà Open SSH sử dụng trong quá trình chứng thực:
SSH Version 2 Keys Local System Default Location Remote Host LocationPrivate Key $HOME/.ssh/id_dsa
Public Key $HOME/.ssh/id_dsa.pub $HOME/.ssh/authorized_keys2SSH Version 1 Key Local System Default Location Remote Host LocationPrivate Key $HOME/.ssh/identity
Public Key $HOME/.ssh/identity.pub $HOME/.ssh/authorized_keys
- $HOME/.ssh/known_hosts: Danh sách các Public Key cho tất cả các Host có User đăng nhập Thường thì các danh sách các Host Public Key được liệt kê ở /etc/ssh_known_hosts- /etc/ssh_known_hosts: Chứa danh sách các RSA Generated Public Key cho tất cả các Host mà hệ thống được biết Bất cứ Host nào muốn đăng nhập đến hệ thống đều phải có Public Key được liệt kê trong file này Admin trên hệ thống của bạn cần phải liệt kê các Public Key của những người sử dụng trong hệ thống mạng đó
- /etc/ssh_known_hosts2: Cũng như ssh_know_host nó chứa danh sách các DSA Generated Public Key cho tất cả các Host mà hệ thống biết.
- $HOME/.ssh/config: File cấu hình cho mỗi người sử dụng Trong một số hệ thống lớn, mỗi người sử dụng sẽ có một file cấu hình đặc biệt Nó sẽ được sử dụng bởi SSH Client.- /etc/ssh/ssh_config: File cấu hình cho toàn bộ hệ thống Nó cũng có thể được sử dụng cho những người sử dụng không có File cấu hình hay tạm thời chưa có file cấu hình Nó tự động được khởi tạo khi cài đặt Open SSH lần đầu và được gọi để sử dụng mỗi khi Open SSH Daemon chạy.
- $HOME/.ssh/rc: Liệt kê những lệnh đã được thực thi trong suốt quá trình người dùng đăng nhập, những lệnh này được thực thi trước khi Shell của người dùng được mở.- /etc/sshrc: Tương tự như /.ssh/rc nó được dùng trên những hệ thống lớn.
VI Sử dụng Open SSH để đảm bảo an toàn dữ liệu trên một hệ thống mạng không
Trang 26an toàn Trước khi sử dụng Open SSH bạn phải chắc chắn rằng hệ thống cục bộ và hệ thống ở xa có cài đặt Open SSH Lệnh ssh-keygen được sử dụng để tạo và quản lý sự chứng thực các SSH Key Để sử dụng Open SSH trước hết bạn phải tạo các DSA hay RSA Private Key, Public Key…
- Đầu tiên bạn hãy tạo một User trên hệ thốngroot@domain.com#: useradd phongnv
- Thiết lập Password cho User nàyroot@domain.com#: passwd phongnvChanging password for user phongnvNew UNIX password: *****Retype new UNIX password: *****
passwd: all authentication tokens updated successfully- Đăng nhập vào Acc phongnv vừa tạo:
- Bây giờ tiếp tục tạo các Private Key và Public Key
Lưu ý: Từ Open SSH v 2.0 trở đi khi bạn yêu cầu tạo Key mới Mặc định nó sẽ
tạo cho bạn các Key RSA Nếu muốn tạo Key DSA bạn phải sử dụng tuỳ chọn -dphongnv@domain.com$: ssh-keygen -d
Generating DSA parameter and key.
Enter file in which to save the key (/home/phongnv/.ssh/id_dsa):
Nhấn Enter nếu bạn muốn lưu Key vào thư mục mặc định của nó:Created directory '/home/phongnv/.ssh'.
Enter passphrase (empty for no passphrase):
Bạn nhập vào passphrase (đây là Password sẽ được mã hoá bằng thuật toán 3 DES để kiểm soát Private Key) Lưu ý: pasphrase không thể phục hồi, nếu quên sẽ phải tạo và phân phối lại các Key Điều này rất phiển phức Nhấn Enter khi mọi việc đã hoàn thành.Your identification has been saved in /home/phongnv/.ssh/id_dsa.
Your public key has been saved in /home/phongnv/.ssh/id_dsa.pub.The key fingerprint is:
Xem qua nội dung Private Key : -BEGIN DSA PRIVATE KEY -Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,D40D902FF5666C7B
JoZuLBBKpkRb4UXNb0IRG2NvtZKQ8h98 -END DSA PRIVATE KEY -
Trang 27Đây là nội dung của Public Key :ssh-dss
v4yQV4fY3CvrbgsAEnBD3mSEpOea7tSNDTxY83D6ayJ40ZS2zN3bhBZos+Jp53tq8Eni1pSELS5wlw5NkkoY+F4lmda+sK5gTOOExI2tWyA0z5V7hkOQuxcLbvc9GR+ywibz phongnv@domain.com
Tất cả thông tin quan trọng đã được mã hoá bằng thuật toán DSA
Lưu ý: phongnv Public Key có thể được phân phát tuỳ thích Bất cứ ai, hệ thống nào muốn truyền thông một cách an toàn với phongnv đều có thể nhận Public Key Bạn có thể đổi tên của Public Key thoải mái Cho mục đích an toàn các Security nên thường xuyên đổi tên Public Key trước khi phân phát cho từng người
Sử dụng Private Key và Public Key
Sử dụng Public Key, trước hết bạn phải phân phát nó Hay nói một cách dễ hiểu làbạn phải kích hoạt các Public Key này vào các vị trí thích hợp trên Remote Server Như đã nói ở trên Public Key có thể được phân phát tuỳ thích và miễn phí Bởi vậy bạn có thể Send nó đến bất cứ hệ thống nào mà bạn muốn truyền thông bằng Open SSH Ví dụ như VeriSign một hãng chuyên cung cấp Digital ID để mã hoá và bảo mật các E-mail cho khách hàng Digital ID thực chất là các Public Key được nhúng các thông tin ID cơ bản ởtrong đó VeriSign sẽ tự động gửi Public Key của người sử dụng lên Site của nó Bất kỳ người sử dụng nào muốn truy cập Public Key của một người sử dụng khác Họ có thể tải suống Digital ID của người dung từ Site của VeriSign:
https://digitalid.verisign.com/services/client/index.html Đối với Private Key Ta sẽ
Upload nó lên Web Server Các Host từ xa sẽ Down Public Key xuống và tự động kích hoạt chúng Bạn tiếp tục thực hiện các bước sau (sau khi đã cài đặt Apache Web Server):- Tạo thư mục Public Key ở thư mục gốc của Apache:
root@domain.com#: mkdir /var/html/pubkeys
- Copy phongnv’s Public Key vào thư mục vừa tạo và đổi tên chúng:root@domain.com#: cp /home/binhnx2000/.ssh/id_dsa.pub /var/html/pubkeys/phongnv.pub
- Trên hệ thống Host ở xa: Bạn cần tham chiếu các thông số như trên Host của bạn Bạn đăng nhập với tư cách root và tạo tiếp một Acc phongnv:
root@domain2.com#: useradd phongnvpasswd vietphong
Changing password for user phongnvNew UNIX password: *****Retype new UNIX password: *****
passwd: all authentication tokens updated successfully
- Tiếp đến tạo một thư mục con “.ssh” trong thư mục chủ của acc phongnv:root@domain2.com#: mkdir /home/phongnv/.ssh
Trang 28Bạn lên địa chỉ đã Upload phongnv’s Public Key và Download nó về:
Lưu nó vào /home/phongnv/.ssh = = > Đây chính là Public Key của domain.com Nó chứa các thông tin về ID được mã hoá bằng thuật toán DSA Mọi việc đã ổn, bây giờ ta thử ssh từ hệ thống 2 qua hệ thống 1 bằng Public Key xem sao:
phongnv@domain2.com#: ssh domain.com
Nếu mọi việc ổn định ta có thể ssh vào hệ thống 1 từ xa qua Open SSH một cách an toàn.Tất cả các giao dịch giữa hệ thống 1 và 2 đều được nén và mã hoá nhằm đảm bảo an toàn trên đường truyền Tuy nhiên! cuộc sống không phải lúc nào cũng tốt đẹp như chúng ta tưởng Ta sẽ gặp phải thông báo:
The authenticity of host domain.com' can't be established.DSA key fingerprint is
ca:3b:f9:80:5a:91:e5:c1:1e:5b:30:02:2f:d5:53:13.Are you sure you want to continue connecting (yes/no) ?
Thông báo trên nói rằng chưa thể thiết lập một kết nối an toàn từ hệ thống 2 đến hệ thống 1 bằng Open SSH Tiếp tục nhấn Yes nối như muốn tiếp tục kết nối Sẽ có một thông báonói rằng Public Key của hệ thống từ xa đã được thêm vào một vị trí hợp lý trên hệ thống cục bộ Công việc cập nhật Public Key đã thành công, lần sau sẽ không phải gặp thông báo khó chịu này nữa Ta thử ssh đến hệ thống từ xa lại một lần nữa xem sao (Sẽ không có bất cứ yêu cầu đòi hỏi Password nào cả, vì nó đã sử dụng và chứng thực Public Key)/home/phongnv/.ssh/know_host
Warning: Permanently added ‘domain.com,24.130.8.170' (DSA) to the list of known hosts.
[phongnv@domain.com phongnv]$
Nếu các thông tin về Public Key không chính xác Hay nói một cách khác là quá trình chứng thực Public Key bị thất bại Open SSH sẽ yêu cầu bạn cung cấp Password của người sử dụng phongnv:
phongnv@domain.com's password:
Password ở đây chính là Password của Acc phongnv được tạo trên hệ thống từ xa Khi nhập User và Password tương tự như Telnet nhưng điểm khác là nó đã được mã Encrypt bởi Open SSH Nếu gặp phải yêu cầu truy vấn Password, hãy xem lại quá trình cấp phát và sử dụng Public Key.
Vấn đề an toàn dữ liệu
Cho đến nay các RSA và DSA Key được coi là có tính an toàn và khả năng mã hoá dữ liệu khá cao (Key RSA hiện đã lên đến độ dài mã hoá 256 bit) Trung tuần tháng 7 cộng đồng Security đã phát hiện được một Bug về khai thác tính dễ tổn thương của những passphrases dưới 2 ký tự Nhưng nó đã nhanh chóng được khắc phục và tính thực dụng của Bug này cũng không cao Open SSH vẫn được cộng đồng *nix coi là một phương tiện truyền thông có tính an toàn cao
3.3 Theo dõi và phân tích logfile
Trên các hệ thống nói chung và các hệ thống Unix/Linux nói riêng Các file log giữ một vai trò rất quan trọng Nó như là một hộp đen của hệ thống, nó sẽ ghi lại mọi thứ
Trang 29xảy ra trên hệ thống của bạn, một cách cực kỳ chi tiết Chẳng hạn như Bash Log Khi hoạt động nó sẽ ghi lại toàn những thao tác, những Command đã được sử dụng trong suôtquá trình làm việc với Shell Bash Một số phiên bản của Unix thường lưu giữ file log ở: /usr/adm Một số phiên bản mới hơn của Unix (trong đó có BSD, Linux, Solaris ) thì các file log được lưu giữ ở: /var/log Thường thì ở bên trong những thư mục này bạn sẽ tìm được các thông tin về log Điều đó có nghĩa là bạn có khả năng nắm trong tay toàn bộ những gì đã xảy ra trên hệ thống của mình.Dưới đây là tên một số log thông dụng và chức năng của nó:
acct hoặc pacct
Ghi lại những Command được sử dụng bởi mọi user trên hệ thống.aculog
Ghi lại thông tin về hoạt động của dial-out-modem.lastlog
Ghi lại thời gian đăng nhập thành công gần nhất của các user cũng như các lần đăng nhậpkhông thành công.
Ghi lại quá trình hoạt động FTP.
Trên đây là một số file log cơ bản và quan trọng của hệ thống Ngoài ra nó còn có rất nhiều file log như: ftplog, maillog, httpdlog Thường thì vị trí và chức năng của các file log thường được cấu hình và lưu giữ ở: /etc/syslog.conf bạn có thể biết thêm chi tiết ởđây.
C2 Audition
Trên nhiều hệ thống Unix cho phép người quản trị mạng quản trị các hệ thống của họ mộtcách toàn diện (còn được gọi là chế độ kiểm toán C2 - C2 Audition) được công nhận bởi US Department of Denfense C2 sẽ kiểm toán những phương tiện nói chung và gán ID Audit tới mỗi nhóm của các tiến trình liên quan, bắt đầu khi Login Tiếp đó những mẫu nhất định của hệ thống được gọi bởi mỗi tiến trình được ghi lại với Audit ID Những thủ tục này bao gồm quá trình gọi đóng và mở file, thay đổi thư mục, hay là việc thay đổi cáctham số người dùng Dù sự uỷ nhiệm cho nội dung chung cho quá trình log Nhưng ở đókhông có tiêu chuẩn được công nhận nói chung nào cho khuôn dạng Chính vì vậy mà từng nhà cung cấp C2 Audition lại có những khuôn dạng log khác nhau, sự điều khiển, sự
Trang 30định vị của các file log cũng khác nhau Một vấn đề đáng chú ý khi sử dụng chế độ kiểm toán C2 Audition là nó có thể tiêu tốn khá nhiều không gian đĩa cứng của bạn trong một thời gian ngắn.
Last login: Tue Jul 12 07:49:59 on tty01
Khi sử dụng lệnh "finger" nếu như nó không bị cấm thì ta cũng có những thông tin tương tự:
% finger tim
Login name: tim In real life: Tim HackDirectory: /Users/tim Shell: /bin/cshLast login Tue Jul 12 07:49:59 on tty01No unread mail
No Plan.%
Một số hệ thống Unix còn hiển thị ra màn hình thông tin của quá trình đăng nhập thành công cũng như các quá trình đăng nhập không thành công khi người dùng đăng nhập thành công vào hệ thống.
Một cách khắc phục cho sự bất thường này là định kỳ sao chép các file log đó Theo C2 Audition thì để an toàn cứ 6 giờ bạn lại thực hiện thao tác sao chép này.
mv /var/adm/lastlog.3 /var/adm/lastlog.4mv /var/adm/lastlog.2 /var/adm/lastlog.3mv /var/adm/lastlog.1 /var/adm/lastlog.2cp /var/adm/lastlog /var/adm/lastlog.1
Nếu không quen dùng lệnh bạn có thể sử dụng "mc" (midnight commander) Nó sẽ giúp thực hiện công việc này một cách dễ dàng hơn Việc này sẽ đảm bảo nội dung của lastlogđược thông suốt trong vòng 6 giờ Nếu có thể bạn nên làm công việc sao lưu mỗi ngày Ởcác Server lớn thường sử dụng ổ băng (tape) để lưu trữ dữ liệu đề phòng khi dữ liệu trục trặc vì giá thành lưu trữ của ổ băng thường rẻ hơn nhiều so với ổ cứng.Khi đã lưu giữ được lastlog bạn cần phải đọc được thông tin của nó một cách toàn diện, bao quát Bạn có
Trang 31thể sử dụng đoạn Script Perl dưới đây để thực hiện công việc đó.#!/usr/local/bin/perl
$fname = (shift || "/var/adm/lastlog");
$halfyear = 60*60*24*365.2425/2; # pedantry aboundssetpwent;
while (($name, $junk, $uid) = getpwent) {$names{$uid} = $name;
open(LASTL, $fname);
for (uid = 0; read(LASTL, $record, 28); $uid++) {( $time, $line, $host) = unpack('l A8 A16', $record);next unless $time;
$host = "($host)" if $host;
($sec, $min, $hour, $mday, $mon, $year) = localtime($time);$year += 1900 + ($year < 70 ? 100 : 0);
print $names{$uid}, $line, "$mday/$mon";
print (time - $time > $halfyear) ? "/$year" : " "$hour:$min";print " $hostn";
close LASTL;
Lưu ý: /var/adm/lastlog : Đây là vị trí file lastlog trên các hệ thống Unix Bạn có thể sửa đổi lại sao cho nó phù hợp với vị trí trên hệ thống của bạn Đoạn Script này bắt đầu bằng việc kiểm tra các dòng lệnh, nếu không khả thi, nó sẽ sử dụng chế độ mặc định Tiếp đó nó sẽ tính toán số giây trong nửa năm, để xác định được khuôn dạng của đầu ra thông tin (để in màn hình những thông tin đăng nhập 6 tháng trước đây Kế đến nó sẽ xây dựng một mảng UIDS tới những tên đăng nhập Sau sự khởi tạo trên, đoạn Script sẽ đọc một phần bản ghi trong file lastlog, các bản ghi binaries sẽ được mở ra và giải mã và sau đó nó được in ra màn hình Lastlog chỉ ghi lại thời gian đăng nhập chứ nó không ghi lại lại chi tiết quá trình chi tiết sử dụng acc File log wtmp sẽ thực hiện việc này.
utmp và wtmp
Unix theo dõi các hoạt động của người dùng bởi file log có tên là /etc/utmp Đây là file nhị phân cho đứa đựng một bản ghi cho mỗi hàng tty File log thứ 2 là /var/amd/wtmp có nhiệm vụ ghi lại tất cả các quá trình đăng nhập lần thoát ra ngoài Trong một sô phiên bảnUnix của Berkeley thì trong utmp và wtmp thường chứa đựng:
- Tên của của các thiết bị đầu cuối được sử dụng để đăng nhập.- Tên đăng nhập.
- Hostname mà kết nối bắt đầu từ, nếu đăng nhập được thực hiện qua 1 mạng.- Thời gian mà người dùng đăng nhập
Trong một số hệ thống V Unix, file wtmp được đặt ở /etc/wtmp và được dùng chomục đích kiểm toán Trên hệ thống AT&T V.3.2 thì nó chứa đựng các thông tin:
- Tên truy nhập.- Số hiệu dòng cuối.- Tên thiết bị.
- Quá trình ID của login shell.- Code biểu thị kiểu mục.
- Thoát khỏi tình trạng của tiến trình.- Thời gian mà mỗi mục được thực hiện.
Phần mở rộng wtmpx được sử dụng bởi Solaris, IRIX và các hệ thống SRV4 Unixchứa đựng những thông tin sau:
Trang 32- Tên truy nhập (có thể lên đến tối đa 32 ký tự thay vì 8 ký tự).- inittab id.
- Tên của thiết bị đầu cuối (có thể lên đến tối đa 32 ký tự thay vì 12 ký tự).- Process ID của tiến trình đăng nhập.
- Thoát khỏi tình trạng của tiến trình.- Thời gian mà mỗi mục được thực hiện.- Session ID.
- Remote host name (cho những sự đăng nhập bắt nguồn qua một mạng)
Lệnh "ps" đưa cho bạn một vài thông tin về tài khoản chính xác hơn của người dùng hiện thời sử dụng hệ thống của bạn hơn là những lệnh: who, whodo, users và finger.Vì trong một vài trường hợp nhưng người dùng có thể cho phép những quá trình chạy màkhông có tên sử dụng của họ xuất hiện bên trong /etc/utmp và /var/adm/wtmp.
Tuy nhiên who, finger, users lại có một vài lợi thế hơn ps:- Chúng cho khuôn dạng thông tin đầu ra dễ đọc hơn ps.
- Đôi khi chúng đưa ra thông tin hữu hiệu hơn so với ps như tên của những remote host từxa.
- Đặc biệt là chúng chạy nhanh hơn ps một cách đáng kể.
Quyền hạn (Permission) trên file /etc/utmp đôi khi có thể được ghi bởi bất kỳ người dùng nào trên hệ thống Điều này thật nguy hiểm, bởi các file log sẽ bị sửa đổi lungtung với mục đích không tốt Bạn cần thiết lập lại quyền hạn (Permission) một cách an toàn hơn
rwx-rw-r (Owner-Group-Other)Ta sử dụng dòng lệnh sau:
root@localhost#: chmod 755 file_logLast Program
Mỗi thời gian người dùng đăng nhập được ghi vào Log Unix sẽ tạo một bản ghi trong wtmp Last program sẽ trình bày nội dung của file trong một mẫu dạng có thể hiểu được Nó sẽ trình bày tất cả các quá trình đăng nhập, thoát ra trên mỗi thiết bị Cuối cùng nó sẽ trình bày toàn bộ nội dung của file Bạn có thể ngừng tiến trình này bằng cách nhấnCTRL + C
localhost@#: last
dpryor ttyp3 std.com Sat Mar 11 12:21 - 12:24 (00:02)simsong ttyp2 204.17.195.43 Sat Mar 11 11:56 - 11:57 (00:00)simsong ttyp1 204.17.195.43 Sat Mar 11 11:37 still logged indpryor console Wed Mar 8 10:47 - 17:41 (2+06:53)
devon console Wed Mar 8 10:43 - 10:47 (00:03)
simsong ttyp3 pleasant.cambrid Mon Mar 6 16:27 - 16:28 (00:01)dpryor ftp mac4 Fri Mar 3 16:31 - 16:33 (00:02)
dpryor console Fri Mar 3 12:01 - 10:43 (4+22:41)
simsong ftp pleasant.cambrid Fri Mar 3 08:40 - 08:56 (00:15)simsong ttyp2 pleasant.cambrid Thu Mar 2 20:08 - 21:08 (00:59)
Trên một vài hệ thống SVR4 bạn có thể sử dụng lệnh "who -a" để xem nội dung của file wtmp Trong màn hình này bạn có thể theo dõi các phiên đăng nhập từ ngày 7/3:
simsong, dpryor, devon, dpyror (again), and simsong (again), 2 người dùng là dpryor và devon đăng nhập tới Console Ngoài ra log còn cho ta biết dpryor và devon cũng đã sử dụng FTP, tên của những trạm đầu cuối cũng được xuất hiện ở đây Ngoài ra last còn có thể cho ta thông tin chi tiết về một người dùng hoặc một thiết bị đầu cuối ra màn hình Nếu bạn cung cấp một người dùng thì nó sẽ hiển thị chi tiết thông tin đăng nhập và thoát
Trang 33ra của người đó Hoặc tương tự bạn cung cấp cho nó tên một thiết bị đầu cuỗi thì nó sẽ hiển thị thông tin đăng nhập và thoát ra riêng cho thiết bị đầu cuối đó.
root@localhost#: last dpryor
dpryor ttyp3 std.com Sat Mar 11 12:21 - 12:24 (00:02)dpryor console Wed Mar 8 10:47 - 17:41 (2+06:53)dpryor ftp mac4 Fri Mar 3 16:31 - 16:33 (00:02)dpryor console Fri Mar 3 12:01 - 10:43 (4+22:41)dpryor ftp mac4 Mon Feb 27 10:43 - 10:45 (00:01)dpryor ttyp6 std.com Sun Feb 26 01:12 - 01:13 (00:01)dpryor ftp mac4 Thu Feb 23 14:42 - 14:43 (00:01)dpryor ftp mac4 Thu Feb 23 14:20 - 14:25 (00:04)dpryor ttyp3 mac4 Wed Feb 22 13:04 - 13:06 (00:02)dpryor console Tue Feb 21 09:57 - 12:01 (10+02:04)
Tinh chỉnh wtmp File log wtmp sẽ tiếp tục tăng kích thước rất nhanh trên ổ cứng chính vìvậy rất khó theo dõi nội dung của nó Do đó có rất nhiều Shell Unix được viết ra để tinh chỉnh wtmp (theo tuần hoặc theo tháng) Hầu hết chúng được thực thi một cách tự động bởi Cron Chẳng hạn như đoạn Script sau:
#!/bin/sh# zero the log file
cat /dev/null >/var/adm/wtmp
Bạn muốn sao chép wtmp, để có thể tham chiếu với những lần đăng nhập bên trong tháng trước đây Để thực hiện việc này bạn cần Add thêm những dòng lệnh dưới đây vào Shell Script ở trên:
# make a copy of the log file and zero the old onerm /var/adm/wtmp.old
ln /var/adm/wtmp /var/adm/wtmp.oldcp /dev/null /var/adm/wtmp.nulmv /var/adm/wtmp.nul /var/adm/wtmp
Tương tự! để thực hiện việc này với last sẽ có dòng lệnh sau:root@localhost#: last -f /var/adm/wtmp.old
Tuy nhiên có thể last không ch phép bạn chỉ rõ một file wtmp khác để tìm kiếm thông qua Nếu muốn kiểm tra lần sao chép file log trước đây và bạn đang sử dụng một trong các hệ thống này thì ta sẽ phải thiết lập file wtmp sau (đã sao chép và cập nhật) vào trong nguyên bản của nó Bạn có thể sử dụng Shell Script sau để thực hiện việc đó:#!/bin/sh
mv /var/adm/wtmp /var/adm/wtmp.realmv /var/adm/wtmp.old /var/adm/wtmplast $*
mv /var/adm/wtmp /var/adm/wtmp.oldmv /var/adm/wtmp.real /var/adm/wtmp
Bất kỳ người dùng nào đăng nhập hay thoát ra đều sẽ được ghi vào file log wtmp.old khi lệnh được thực hiện.
Loginlog file
Trên một vài hệ thống V Unix (Solaris) Các quá lần đăng nhập thất bại sẽ được ghi vào file log /var/adm/loginlog Tuy nhiên trên một số hệ thống lại không có Ta có thể tạo nó bằng các lệnh sau:
root@localhost#: touch /var/adm/loginlogroot@localhost#: chmod 600 /var/adm/loginlogroot@localhost#: chown root /var/adm/loginlog
Sau khi được khởi toạ nó sẽ ghi lại những lần đăng nhập không thành công Thường đây là những lần đănh nhập với mục đích xấu (có thể kẻ tấn công đang cố gắng bẻ khoá để đăng nhập vào hệ thống) Các hệ thống V Unix sẽ tự động ngăn chặn một
Trang 34đăng nhập trong một khoảng thời gian nếu như sau 5 lần mà vẫn không thành công (để đềphòng trường hợp tấn công bằng Brute Force) Tất nhiên Unix sẽ ghi lại chi tiết 5 lần đăng nhập không thành công này.
root@localhost#: cat /var/adm/loginlogsimsong:/dev/pts/8:Mon Nov 27 00:42:14 2001simsong:/dev/pts/8:Mon Nov 27 00:42:20 2001simsong:/dev/pts/8:Mon Nov 27 00:42:26 2001simsong:/dev/pts/8:Mon Nov 27 00:42:39 2001simsong:/dev/pts/8:Mon Nov 27 00:42:50 2001
3.4 Cài đặt và nâng cấp hệ thống3.4.1 Linux OpenSSL Server
Tổng quan:
Hầu hết các phần mềm như IMAP&POP, Samba, OpenLDAP, FTP, Apache và những phần mềm khác đều yêu cầu công việc kiểm tra tính xác thực (authentication) của người sử dụng trước khi cho phép sử dụng các dịch vụ này Nhưng mặc định việc truyền tải sự xác minh thông tin người sử dụng và mật khẩu (password) ở dạng văn bản thuần túy nên có thể được đọc hoặc thay đổi bởi một người khác Kỹ thuật mã hóa như SSL sẽ đảm bảo tính an toàn và nguyên vẹn của dữ liệu, với kỹ thuật này thông tin truyền trên mạng ở dạng điểm nối điểm được mã hóa Một khi OpenSSL đã được cài đặt trên Linux server, ta có thể sử dụng nó như một công cụ thứ ba cho phép các ứng dụng khác dùng tính năng SSL.
Sự diễn giải về OpenSSL:
Dự án OpenSSL là một kết quả của sự cộng tác nhằm phát triển một kỹ thuật bảo mật dạng thương mại, đầy đủ các đặc trưng và là bộ công cụ mã nguồn mở thực thi các giao thức như Secure Sockets Layer (SSL v2/v3) và Transport Layer Security (TSL v1) với những thuật toán mã hóa phức tạp Dự án được quản lý bởi hiệp hội những người tìnhnguyện trên thế giới, sử dụng Internet để trao đổi thông tin, lập kế hoạch và phát triển công cụ OpenSSL và các tài liệu liên quan khác.
Sự thuận lợi của việc mã hóa:
Những lợi ích chính thu được khi sử dụng công nghệ mã hóa như sau:
Sự tin cẩn dữ liệu.
Khi một thư tín (message) được mã hóa, văn bản thuần túy đưa vào được biến đổi bởi một thuật toán thành dạng văn bản được mã hóa, dạng văn bản này che dấu ý nghĩa của message và có thể được gởi thông qua mạng Internet hoặc Intranet Quá trình này đòihỏi một khóa riêng (secret key), khóa này dùng để mã hóa dữ liệu và sau đó giải mã dữ liệu Không có secret key, việc mã hóa dữ liệu là vô nghĩa.
Tính toàn vẹn dữ liệu.
Một sự kiểm tra tổng thể mật khẩu được gọi là mã kiểm tra tính xác thực thông điệp (Message Authentication Code) mà trong kỹ thuật mã hóa được gọi là MAC, có thể được tính toán tùy ý trên văn bản người sử dụng cung cấp để bảo vệ tính toàn vẹn của dữ liệu Kết quả (văn bản và MAC) sau đó được gởi tới người nhận, người nhận kiểm tra nộidung của MAC kèm theo message bằng cách tính toán lại MAC cho message nhận được,
Trang 35sử dụng khóa riêng (secret key) thích hợp và kiểm tra giá trị MAC có bằng chính xác MAC nhận được hay không.
Sự xác thực (Authentication).
Việc xác minh cá nhân là một cách mã hóa khác, ở đây người dử dụng/người gởi biết mộtsecret key, cái mà có thể được dùng để chứng thực nhận dạng của anh ấy/cô ấy.
Chữ ký điện tử (Electronic Signature).
Một chữ ký điện tử đảm bảo người gởi và người nhận rằng message là đáng tin cậy và chỉcó người chủ sở hữu của khóa có thể sinh ra chữ ký điện tử cho người đó.
Việc sáng chế (Patents).
Một vài vấn đề hợp lý sẵn có cho công nghệ SSL Nếu bạn có ý định sử dụng OpenSSL cho mục đích thương mại bạn cần có một sự cho phép từ tổ chức sáng chế RSA về việc sử dụng các thư viện RSA.
Đây là đoạn một đoạn trích trong tập tin README của OpenSSL.
Các công ty khác nhau nắm giữ các bằng sáng chế khác nhau cho những thuật toán khác nhau trong những vị trí khác nhau trong những vị trí khác nhau trên thế giới Bạn phải chịu trách nhiệm đảm bảo rằng việc sử dụng bất kỳ thuật toán nào của bạn là hợp lệ bằng cách kiểm tra nếu có bất kỳ bằng sáng chế nào trong quốc gia của bạn hay không Tập tin này chứa đựng một vài bằng sáng chế mà chúng tôi biết hoặc theo lời giới thiệu sẵn có Đây không phải là danh sách cuối cùng.RSA Data Security nắm giữ bằng sáng chế phần mềm trên những thuật toán RSA và RC5 Nếu những thuật toán của họ được dùng bên trong USA và Japan thì phải liên hệ với RSA Data Security cho các điều kiện được phép sử dụng Trang Web của RSA Data Security có thể truy cập theo địa chỉ http://www.rsa.com/ RC4 là nhãn hiệu đăng ký của RSA Data Security như vậy việc sử dụng thuật toán này phải được phép của RSA Data Security.Thuật toán IDEA có bằng sáng chế bởi Ascom ở Áo, Pháp, Đức, Ý, Nhật, Hà Lan, Tây Ban Nha, Thụy Điển, Thụy Sĩ, Anh và Mỹ Họ sẽ được liên hệ nếu thuật toán được sử dụng Tham khảo trang web theo địa chỉ http://www.ascom.ch
Hướng dẫn cài đặt.
Các dòng lệnh thì tương ứng với Unix Đường dẫn nguồn sẽ là "/var/tmp" (cũng có thể chọn những đường dẫn khác) Việc cài đặt được thử nghiệm trên Red Hat Linux 6.1 và 6.2 Tất cả các bước trong việc cài đặt sẽ xảy ra với người sử dụng có quyền cao nhất trong hệ thống (root) Phiên bản OpenSSL là 0.9.5a Dạng lưu trữ Tarballs Trước hết bạn hãy tạo ra danh sách các tập tin trên hệ thống trước và khi cài đặt OpenSSL, sau đó so sánh chúng dùng lệnh "diff" để tìm ra các tập tin nào là được đặt ở đâu Đơn giản chạy lệnh "find /* > OpenSSL1" trước và "find /* > OpenSSL2" sau khi bạn cài đặt phần mềm, và sử dụng lệnh "diff OpenSSL1 OpenSSL2> OpenSSL-Installed" để lấy một danhsách các thay đổi nào đó.
Các gói cần thiết (Packages).
OpenSSL Homepage Site: http://www.ssh.org.
Bạn phải đảm bảo là tải về gói: openssl-0.9.5a.tar.gz.
Sự biên dịch.
Giải nén tập tin dạng tarball (tar.gz).
[root@deep /]# cp openssl-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
Trang 36[root@deep tmp]# tar xzpf openssl-version.tar.gz
Biên dịch và tối ưu.
Chuyển vào thư mục OpenSSL mới và gõ những lệnh sau:
[root@deep openssl-0.9.5a]# perl util/perlpath.pl /usr/bin (Chứa chương trình perl).
Bước 3:
OpenSSL cần phải biết ở đâu có thể tìm những thư viện nguồn OpenSSL để biên dịch chính xác những tập tin yêu cầu của chúng Với những lệnh dưới đây chúng ta đặt đường dẫn biến môi trường tới thư mục mặc định, ở đó chúng ta đã giải nén các tập tin nguồn OpenSL.
Hiệu chỉnh tập tin Makefile.ssl (vi +52 Makefile.ssl) và thay đổi những dòng sau:
CFLAG= -DTHREADS -D_REENTRANT -DSSL_FORBID_ENULL -DL_ENDIAN -DTERMIO -O9 ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions-Wall -DSHA1_ASM -DMD5_ASM -DRMD160_ASM
-funroll-loops-Hiệu chỉnh tập tun Makefile.ssl (vi +79 Makefile.ssl) thêm những giá trị sau cho bộ vi xử lý Pentium Pro.
PROCESSOR = 686
Chú ý: Cả ba sự thay đổi chúng ta đã làm ở trên sẽ đặt cờ tối ưu cho sự biên dịch của phần mềm OpenSSL trên server Với sự thay đôiư thứ 3 ở trên (PROCESSOR=), nếu bạnđang chạy OpenSSL trên máy Pentium thì hãy đặt giá trị 586, nếu Pentium Pro / II / III đặt giá trị 686 còn nếu bạn đang chạy trên máy 486 thì giá trị sẽ là 486.