Showing posts with label Security. Show all posts
Showing posts with label Security. Show all posts

Thursday, September 11, 2008

Phát hiện và chống xâm nhập Web Server với Mod Security

Phát hiện và chống xâm nhập Web Server với Mod Security
1. giới thiệu về Mod_security
ModSecurity là một bộ máy phát hiện và phòng chống xâm nhập dành cho các ứng dụng web (hoặc 1 web application firewall). Hoạt động như một module của máy chủ web Apache, mục đích của ModSecurity là tăng cường bảo mật cho các ứng dụng web, bảo vệ chúng khỏi các loại tấn công đã biết và chưa biết.

Sau khi cài đặt Apache mặc định sẽ không có mod_security.Bạn phải download mod_security từ http://www.modsecurity.org .Phiên bản mới nhất hiện nay là 1.9. Mod_security dùng được cho cả apache 1.x và 2.x (trên cả windows ,*.nix …)

2.Cài đặt và cấu hình:
Việc install Mod_security tương đối đơn giản,sau khi đã download Binary packages về:
Với apache 2.x:
Bạn chỉ việc copy file mod_security.so vào thư mục modules/ của apache và mở file httpd.conf thêm vào dòng sau:
LoadModule security_module modules/mod_security.so
là có đã hoàn thành bước cài đặt
Với apache 1.x:
Ban copy file mod_security.so (*.nix ) hoăc mod_security.dll (windows) vào thư mục libexec/ và mở file httpd.conf thêm vào dòng sau:
LoadModule security_module libexec/mod_security.so
Để sử dụng mod_security bạn phải cấu hình cho nó( cái này tùy vào mỗi hệ thống mà sẽ dẫn đến những cấu hình khác nhau). Trước tiên bạn mở file httpd.conf ra và thêm vào dòng sau:

# cấu hình cho mod_security

hoặc bạn có thể tạo riêng một file là modsecurity.conf trong thư mục conf cua apache và include nó tù file cấu hình của apache httpd.conf:

include conf/modsecurity.conf

Sau khi cài đặt mặc định bộ máy filtering sẽ disable ( muốn dùng mod_security chúng ta phải bật nó lên).
Ban chỉ việc thêm vào dòng sau trong file modsecurity.conf:
SecFilterEngine On ( or Off , DynamicOnly )
Sau đây là cách cấu hình cho mod_security để hạn chế những kiểu tấn công cơ bản:

#Chống lại kiểu tấn công thực thi các lệnh:
SecFilter /etc/password
SecFilter /bin/ls
#Chống lại kiểu tấn công Directory traversal
SecFilter "\.\./"
#Lọc các kí tự hay dùng trong shell code
SecFilterForceByteRange 32 126
#Lọc các kí tụ hay dùng trong XSS attack
SecFilter "<(.|\n)+>"
SecFilter "<[[:space:]]*script"
#chống lại kiểu tấn công XSS thông qua PHP session cookie
SecFilterSelective ARG_PHPSESSID "!^[0-9a-z]*$"
SecFilterSelective COOKIE_PHPSESSID "!^[0-9a-z]*$"
#Hạn chế sqlinjection attack
SecFilter "delete[[:space:]]+from"
SecFilter "insert[[:space:]]+into"
SecFilter "select.+from"
#Hạn chế MSSQL injection attack
SecFilter xp_enumdsn
SecFilter xp_filelist
SecFilter xp_availablemedia
SecFilter xp_cmdshell
SecFilter xp_regread
SecFilter xp_regwrite
SecFilter xp_regdeletekey
#chống spam mail

SecFilterSelective "ARG_recipient" "!@modsecurity\.org$"

#phát hiện xâm nhập
SecFilterSelective OUTPUT "Volume Serial Number"
SecFilterSelective OUTPUT "Command completed"
SecFilterSelective OUTPUT "Bad command or filename"
SecFilterSelective OUTPUT "file(s) copied"
SecFilterSelective OUTPUT "Index of /cgi-bin/"
SecFilterSelective OUTPUT ".*uid\=\("
#Nếu muốn ghi lại log
SecAuditLog logs/audit.log
SecFilterDebugLog logs/modsec.log
SecFilterDebugLevel 0
#Muốn mod_security phân tích POST request, dùng:
SecFilterScanPOST On

# để mod_security *kiểm tra* URL encoding và UTF-8.
SecFilterCheckURLEncoding On
SecFilterCheckUnicodeEncoding On
Lưu ý:nếu bạn dùng SecFilterCheckUnicodeEncoding On, một số bộ gõ hay input tiếng Việt sẽ không hoạt động, một số bộ gõ hay input tiếng Việt sẽ không hoạt động
Nếu bạn chạy web với nhiều virtualhost và muốn một site trong nhiều sites không dùng mod_security, bạn có thể dùng:
SecFilterSelective SERVERNAME "^tên_của_web_site$" nolog,allow

3. Lời kết
Trên đây chỉ là vài cấu hình cơ bản,Còn rất nhiều kiểu cấu hình mà tôi không đề cập (tùy thuộc vào hệ thống của bạn mà có cấu hình cho thích hợp).
Chúc bạn thanh công.
(st)


۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩ Chữ ký của ghost_vn ۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩

*** Một người đi xe máy va phải chú sẻ bay ngược chiều. Anh ta dừng xe, thấy chưa chết bèn nhặt về đắp thuốc rồi thả vào lồng. Tỉnh lại, thấy mình bên song sắt, chú sẻ thở dài: - Bỏ mẹ. Mình đâm chết thằng đi xe máy rồi. Chắc tù mọt gông đây..pó tay con chim ***

_.:: Nếu bài biết hay xin hãy kích Thank ::._

url:http://haiphongit.com/forum/showthread.php?t=2830

Mẹo và thủ thuật bảo mật SSH nâng cao

Mẹo và thủ thuật bảo mật SSH nâng cao
Mẹo và thủ thuật bảo mật SSH nâng cao



Trong bài này, chúng tôi giới thiệu một số thủ thuật đơn giản giúp bạn nâng cao tính năng bảo mật cho dịch vụ Secure Shell (SSH).


File cấu hình server SSH được đặt trong thư mục /etc/ssh/sshd_conf. Bạn cần khởi động lại dịch vụ SSH sau mỗi lần thay đổi để các thay đổi đó được thực thi.

Thay đổi cổng SSH

Mặc định, SSH tuân theo các kết nối đến trên cổng 22. Kẻ tấn công thường sử dụng phần mềm quét cổng xem liệu các host (máy trạm) có sử dụng dịch vụ SSH không. Thay đổi cổng SSH lên cao hơn 1024 là một lựa chọn khôn ngoan, vì hầu hết mọi chương trình quét cổng (gồm cả nmap) mặc định đều rà soát được các cổng cao.

Mở file /etc/ssh/sshd_config và tìm dòng có ghi:
Port 22
Thay đổi số cổng và khởi động lại dịch vụ SSH:
/etc/init.d/ssh restart
Chỉ cho phép sử dụng giao thức SSH 2

Có hai loại giao thức SSH. Nếu chỉ dùng giao thức SSH 2 thì sẽ an toàn hơn nhiều vì SSH 1 thường gặp phải vấn đề bảo mật với kiểu tấn công man-in-the-middle và insertion. Mở file /etc/ssh/sshd_config và tìm dòng sau:
Protocol 2,1
Thay đổi dòng thành protocol 2.

Chỉ cho phép một số đối tượng người dùng đăng nhập qua SSH

Bạn không nên cho phép người dùng root đăng nhập qua SSH, vì điều này gây nên mối đe doạ bảo mật lớn mà không cần thiết. Nếu một kẻ tấn công nào đó thu được đặc quyền root khi đăng nhập vào máy, khả năng phá hoại có thể gấp mấy lần người dùng thông thường. Bạn nên cấu hình server SSH không cho phép người dùng root đăng nhập. Đầu tiên, tìm dòng ghi:
PermitRootLogin yes
Thay đổi yes thành no và khởi động lại dịch vụ. Sau đó bạn có thể đăng nhập lại hệ thống với bất kỳ vai trò người dùng xác định nào đó và chuyển sang người dùng root nếu muốn trở thành siêu người dùng.

Sẽ khôn ngoan hơn khi tạo một user cục bộ giả hoàn toàn không có đặc quyền gì trên hệ thống và dùng tên user đó để đăng nhập SSH. Sử dụng cách thức này sẽ giúp máy tính không bị hại dù tài khoản người dùng có bị xâm phạm. Khi tạo người dùng này, hãy chắc chắn nó phải nằm trong nhóm wheel để bạn có thể chuyển sang nhóm superuser (siêu người dùng) nếu cần.

Nếu muốn tạo danh sách một số đối tượng người dùng được phép đăng nhập vào SSH, bạn có thể mô tả chúng trong file sshd_config. Ví dụ, nếu muốn cho phép người dùng anze, dasa, kimy đăng nhập qua SSH, ở cuối file sshd_config, thêm vào một dòng như sau:
AllowUsers anze dasa kimy
Tạo banner SSH tuỳ biến

Nếu muốn mời một người dùng kết nối tới dịch vụ SSH để xem một thư nào đó, bạn có thể tạo banner SSH tuỳ biến. Thực hiện đơn giản bằng cách tạo một file text (trong ví dụ là file etc/ssh-banner.txt) và đặt bất kỳ kiểu thư text nào bạn có vào trong đó. Ví dụ:
*****************************************************************
*This is a private SSH service. You are not supposed to be here.*
*Please leave immediately. *
*****************************************************************
Khi muốn chỉnh sửa hoặc ghi file, trong sshd_conf, tìm dòng ghi:
#Banner /etc/issue.net
Không cần bình luận về dòng trên mà hãy thay đổi đường dẫn tới file text banner SSH tuỳ biến của bạn.

Sử dụng cơ chế thẩm định khoá công cộng DSA

Thay vì sử dụng tên và mật khẩu khi đăng nhập vào SSH, bạn có thể dùng cơ chế thẩm định khoá công cộng DSA. Chú ý rằng bạn có thể sử dụng username, password và khoá DSA cùng một lúc. Sử dụng cơ chế thẩm định khoá công cộng DSA cho phép hệ thống ngăn chặn được kiểu tấn công theo sách vở, vì bạn có thể đăng nhập vào dịch vụ SSH mà không cần dùng đến tên và mật khẩu. Thay vào đó, bạn cần một cặp khoá DSA: một khoá chung (public) và một khoá riêng (private). Khoá riêng được giữ trên máy của bạn, còn khoá chung được đưa lên server. Khi muốn đăng nhập vào một phiên SSH, server sẽ kiểm tra khoá. Nếu tất cả thông số đều khớp, bạn được đưa vào hệ thống. Nếu khoá không khớp, kết nối bị ngắt.

Ở ví dụ dưới đây, máy riêng sẽ kết nối tới máy chủ được đặt tên là station1 và máy chủ là server1. Trên cả hai máy đều có cùng một thư mục chủ (home folder). Chú ý là kết nối sẽ không hoạt động nếu thư mục chủ trên client và server khác nhau. Đầu tiên, tạo một cặp khoá trên máy riêng với lệnh ~$ ssh-keygen -t dsa. Bạn sẽ được nhắc cụm mật khẩu cho khoá riêng, nhưng hãy để trống, chúng ta chưa quan tâm đến phương thức này vội. Một cặp khoá được tạo: khoá riêng nằm trong ~/.ssh/id_dsa và khoá chung được đặt tại .ssh/id_dsa.pub.

Tiếp theo, copy nội dung ~/.ssh/id_dsa.pub to server1 vào file ~/.ssh/authorized_keys. Nội dung trong ~/.ssh/id_dsa.pub có dạng:
~$ cat .ssh/id_dsa.pub
ssh-dss AAAAB3NzaC1kc3MAAACBAM7K7vkK5C90RsvOhiHDUROvYbNgr7YEqtrdfFCUVwMWcJYDusNG
AIC0oZkBWLnmDu+y6ZOjNPOTtPnpEX0kRoH79maX8NZbBD4aUV91lbG7z604ZTdrLZVSFhCI/Fm4yROH
Ge0FO7FV4lGCUIlqa55+QP9Vvco7qyBdIpDuNV0LAAAAFQC/9ILjqII7nM7aKxIBPDrQwKNyPQAAAIEA
q+OJC8+OYIOeXcW8qcB6LDIBXJV0UT0rrUtFVo1BN39cAWz5puFe7eplmr6t7Ljl7JdkfEA5De0k3WDs
9/rD1tJ6UfqSRc2qPzbn0p0j89LPIjdMMSISQqaKO4m2fO2VJcgCWvsghIoD0AMRC7ngIe6btaNIhBbq
ri10RGL5gh4AAACAJj1/rV7iktOYuVyqV3BAz3JHoaf+H/dUDtX+wuTuJpl+tfDf61rbWOqrARuHFRF0
Tu/Rx4oOZzadLQovafqrDnU/No0Zge+WVXdd4ol1YmUlRkqp8vc20ws5mLVP34fST1amc0YNeBp28EQi
0xPEFUD0IXzZtXtHVLziA1/NuzY= anze@station1.example.com
Nếu file ~/.ssh/authorized_keys đã tồn tại, gắn thêm nội dung trong ~/.ssh/id_dsa.pub vào file ~/.ssh/authorized_keys trên server1. Bạn chỉ cần thực hiện một việc là thiết lập chính xác đặc quyền trong file ~/.ssh/authorized_keys trên server1:
~$ chmod 600 ~/.ssh/authorized_keys
Bây giờ cấu hình file sshd_conf để sử dụng cơ chế thẩm định khoá DSA. Hãy chắc chắn rằng bạn có ba dòng không chú thích sau:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
Khởi động lại dịch vụ. Nếu mọi thứ đã được cấu hình chính xác, bạn đã có thể sử dụng SSH cho server và đặt trực tiếp nó vào thư mục chủ mà không cần bất kỳ tương tác nào khác.

Nếu muốn chỉ sử dụng duy nhất một cơ chế thẩm định DSA, không cần chú thích hay thay đổi dòng PasswordAuthentication trong file sshd_config từ yes thành no:
PasswordAuthentication no
Nếu ai đó cố gắng kết nối tới dịch vụ SSH mà không có khoá chung trên server, anh ta sẽ bị từ chối và thậm chí không được đưa nền đăng nhập ra với thông báo lỗi:
Permission denied (publickey).
Sử dụng các hàm bao TCP để cho phép chỉ một số host được kết nối

Phương thức trên sẽ rất hữu ích nều bạn muốn giới hạn số host trên mạng có thể kết nối tới dịch vụ SSH. Nhưng nó không thể sử dụng hoặc kết hợp được với cấu hình các bảng IP (iptable). Thay vào đó, bạn có thể dùng các hàm bao TCP, cụ thể là sshd TCP. Bạn có thể đưa ra quy tắc chỉ cho phép một số host nhất định trên mạng con cục bộ (local subnet) 192.168.1.0/24 và host từ xa 193.180.177.13 kết nối tới dịch vụ SSH.

Các hàm bao TCP mặc định đầu tiên sẽ xem trong file /etc/hosts.deny danh sách các host bị từ chối kết nối tới dịch vụ. Tiếp theo là file /etc/hosts để xem liệu có quy tắc nào cho phép một số host kết nối tới một dịch vụ đặc biệt nào đó không. Ví dụ, tôi sẽ tạo một quy tắc như vậy trong tư mục /etc/hosts.deny:
sshd: ALL
Quy tắc trên có nghĩa là, mặc định tất cả các host đều bị cấm truy cập dịch vụ SSH. Điều này là cần thiết, vì nếu không tất cả các host ở đây đều có quyền truy cập dịch vụ SSH. Do hàm bao TCP đầu tiên sẽ xem xét trong file hosts.deny, nếu không có quy tắc nào liên quan đến ngăn chặn sử dụng dịch vụ SSH, bất kỳ host nào cũng có thể đến nôi đến nó. Tiếp theo, tạo một quy tắc trong /etc/hosts để cho phép chỉ một số host cụ thể (như được định nghĩa ở trên) sử dụng dịch vụ SSH:
sshd: 192.168.1 193.180.177.13
Bây giờ, chỉ có các host trên mạng 192.168.1.0/24 và host 193.180.177.13 mới có quyền truy cập dịch vụ SSH. Tất cả host khác đều bị ngắt kết nối trước khi được đăng nhập và nhận một thông báo lỗi như sau:
ssh_exchange_identification: Connection closed by remote host
Sử dụng iptables để giới hạn số lượng host được kết nối

Một lựa chọn khác ngoài các hàm bao TCP là giới hạn truy cập SSH với iptables (các bảng địa chỉ IP). Song, bạn có thể sử dụng kết hợp cả hai phương thức này cùng một lúc. Dưới đây là một ví dụ đơn giản về cách cho phép một số host nhất định kết nối tới SSH:
~# iptables -A INPUT -p tcp -m state --state NEW --source 193.180.177.13 --dport 22 -j ACCEPT
Và để chắc chắn rằng không có host nào khác được truy cập dịch vụ SSH:
~# iptables -A INPUT -p tcp --dport 22 -j DROP
Ghi lại một số quy tắc mới và hoàn chỉnh công việc.

Một số mẹo thời gian SSH

Bạn có thể dùng các tham số iptables khác để giới hạn kết nối tới dịch vụ SSH trong một khoảng thời gian nhất định. Kiểu thời gian có thể là giây, phút, giờ, hoặc ngày (/second, /minute, /hour, /day ), như ví dụ dưới đây.

Ở ví dụ đầu, nếu người dùng nhập mật khẩu sai, truy cập vào dịch vụ SSH sẽ bị khoá trong một phút. Và sau đó người dùng chỉ được phép gõ thông tin đăng nhập vào sau từng phút:
~# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
~# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP
Trong ví dụ thứ hai, iptables được thiết lập chỉ cho phép host 193.180.177.13 kết nối tới dịch vụ SSH. Sau ba lần đăng nhập thất bại, iptables chỉ cho phép host đăng nhập lại sau từng phút:
~# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
~# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP
Kết luận

Các thành phần này không khó cầu hình, nhưng chúng là những kỹ thuật rất mạnh trong chế độ bảo mật dịch vụ SSH. Bỏ ra chút thời gian đầu tư, bạn sẽ có được giấc ngủ ngon.


۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩ Chữ ký của ghost_vn ۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩۩

urlhttp://haiphongit.com/forum/showthread.php?t=2105

Tăng Độ Bảo Mật Khi Remote Desktop Bằng SSL

Tăng Độ Bảo Mật Khi Remote Desktop Bằng SSL
I. Giới Thiệu
- Mặc định Terminal server dùng chế độ mã hóa native RDP . Chế độ này không chứng thực server . Do đó để gia tăng tính bảo mật khi remote desktop thì chúng ta sẽ sử dụng Transport Layer Security (TLS) version 1.0 . Với chế độ này chúng ta có thể mã hóa và chứng thực máy remote tới server

II. Chuẩn bị
- Máy client phải là windows XP or window 2000 và phải cài RDP 5.2 . Download tại đây : http://nhatnghe.com/tailieu/remote_ssl/tool/rdp.msi

- Máy Terminal server phải là windows server 2003 SP1 trở lên . Phải cài các component sau : ( phải cài theo thứ tự )
* ASP.net
* IIS
* Stand alone – CA

III. Thực Hiện

A. Cấu hình trên máy Terminal Server

• Cài đặt Certificate

B1 : Mở Internet explorer : đánh vào địa chỉ http://IP_máy_server/certsrv
B2 : Chọn Request a certificate


B3 : Chọn Advanced Certificate Request


B4: Chọn Create and submite a request to this CA


B5 : Điền thông tin trong phần Identifying Information giống như trong hình .
***** Phần name rất quan trọng . Nếu bạn muốn client remote bằng tên gì thì tên CA phải để giống như vậy. Ví dụ nếu muốn remote qua đường internet thì chỗ này phải để con IP tĩnh , or domain , or host cập nhật IP động . Còn làm test trong lan chơi thì chỗ này hoặc là để IP hoặc là để tên máy tính ( tùy vào việc muốn client remote tới server bằng cái gì )
- Type of certificate needed : Chọn Server Authentication Certificate


Cuộn xuống dưới :
- CSP : chọn Microsoft RSA SChannnel Cryptographic Provider
- Chọn mục Mark keys as exportable
- Chọn mục Store certificate in the local computer certificate store
- Chọn Submite > Yes





B6 : Start > Program > Administrative tools > Certification Authority > Chọn Pending Request
B7 : Chuột phải lên CA trong đây > All tasks > Issue


B8 : Mở IE > truy cập http://IP_máy_server/certsrv
Chọn View the status of a pending certificate request


Chọn Server Authentication Certificate


Chọn install this certificate


Chọn yes


• Cấu hình Transport Layer Security : chứng thực và mã hóa

B1 : Start > Program > Administrative tools > Terminal Services Configuration
B2 : Trong khung bên trái chọn connection > Khung bên phải : chuột phải RDP-tcp > chọn Properties



B3 : Trong tab General > Chọn Edit



B4 : Chọn CA đã xin > Ok > OK



B5 : Trong phần security layer có 3 lựa chọn :
*RDP Security Layer : chế độ mặc định khi remote desktop thông thường
*Negotiate : Chế độ này sẽ dùng TLS để chứng thực máy client , tuy nhiên nếu máy client không hỗ trợ TLS thì máy đó sẽ không được chứng thực
*SSL : Chế độ này sẽ dùng TLS để chứng thực máy client , nếu máy client không hỗ trợ TLS thì sẽ không thể tạo kết nối tới server

- Ở đây chúng ta dùng chế độ SSl
- Nếu dùng SSL or Negotiate thì trong phần encrytion level phải chọn là High . Ở chế độ high này thì đường truyền sẽ được mã hóa ở chế độ 128 bit
- Đánh dấu chọn vào mục “Use standard Windows logon interface”

B. Download CA từ máy Server và import vào client

Thực hiện trên Server
B1 : Mở IE đánh địa chỉ : http://localhost/certsrv
B2 : Chọn Download a CA certificate , certificate chain , or CLS


B3 : Chọn Download a certificate


B4 : Chọn Save > chọn nơi lưu > copy file mới save dzô USB để dành



Thực hiện trên client :
B1 : Mở start > run > đánh lệnh MMC
B2 : Menu File > Chọn add/remove spap-in > chọn Add
B3 :Chọn Certificates



B4 : Chọn Computer accounts > next > Finish



B5 : Chỉnh Regedit > Start > run > regedit > tìm đến khóa HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Terminal Server Client

- Chuột phải lên Terminal Server Client > chọn New > Dword value > Sửa tên giá trị mới tạo thành AuthenticationLevelOverride

- Double click vào AuthenticationLevelOverride > Trong ô value data đánh vào gía trị : 1

B6 : Kiểm tra : Start > program > remote desktop connection ( anh nào mở start > run > oánh mstsc >Có thể nó ra phiên bản RDP cũ hổng chạy ráng chịu )

B7 : Trong cửa sổ remote connection > chọn option > qua tab security > Quan sát trong mục Authentication > là Required Authentication



B8: Qua tab General > điền vào phần computer cái tên CA mà bạn đã xin trên server ( tên máy tính , IP …. ) > chọn connect



B9 : Remote thành công > quan sát thấy đường truyền giữa client và server đã được mã hóa ( cái biểu tượng khóa màu vàng á )

Ngồn : Nhatnghe

url:http://haiphongit.com/forum/showthread.php?t=2842