Tìm hiểu naxsi cấu hình và cài đặt

  • pdf
  • 25 trang
TÌM HIỂU NAXSI CẤU HÌNH VÀ CÀI
ĐẶT

1

Contents

TÌM HIỂU VỀ NAXSI ...................................................................................................... 4
Giới thiệu Naxsi ............................................................................................................. 4
Một vài Rules mẫu:........................................................................................................ 9
Cài đặt và cấu hình ...................................................................................................... 11
a. Cài đặt ................................................................................................................. 11
Cấu hình ....................................................................................................................... 12
Tìm hiểu về NGINX ......................................................................................................... 22
Giới thiệu Nginx ........................................................................................................... 22
Cài đặt Nginx ............................................................................................................... 23

2

3

TÌM HIỂU VỀ NAXSI
Giới thiệu Naxsi
Apache có một web application firewall và cũng là một security module cực mạnh
là mod_security. Nginx cũng có một security module mạnh tương tự, đó chính là
NAXSI. NAXSI là module phát triển dành riêng cho Nginx, NAXSI là viết tắt của
Nginx Anti XSS and SQL Injection. Sử dụng NAXSI cho phép bạn bảo vệ web
application của bạn tốt hơn với cách viết rules uyển chuyển, đa dạng, tốc độ xử lý
nhanh.
NAXSI được viết tắt từ “Nginx Anti XSS and SQL Injection”, là một web
application firewall được phát triển dành riêng cho Nginx. NAXSI hoàn toàn open
source và miễn phí. NAXSI có thể tự động phát hiện và ngăn chặn các cuộc tấn công
bằng XSS và SQL Injection vào web application của bạn, thông qua hệ thống rules
linh hoạt và bạn cũng có thể tự xây dựng thêm rules cho NAXSI.
4

Cách làm việc của NAXSI rất đơn giản, NAXSI tự động đọc và phân tích các
POST và GET request gửi đến webserver. Nếu phát hiện các dấu hiệu khả nghi, như
chứa các string liên quan đến SQL Injection, XSS, thì tự động block các request từ IP
đó, cách block là redirect truy cập sang một địa chỉ URL khác.
So sánh:

Nginx usage in February 2013.

5

Bảng so sánh tốc độ sử lý trả về

6

Hoạt động của NAXSI:

7

8

Rules:



URL : Checks on the search pattern in the URL (server path).



ARGS: Searches for the pattern in the request arguments.



FILE_EXT: Tests the file attachment for the search pattern.



BODY: Checks the body of a POST request for the search pattern; can be further limited
with$BODY_VAR:VarName.



HEADERS : Finds the search pattern in the header of a request; can be further
delimited:$HEADERS_VAR:UserAgent, $HEADERS_VAR:Cookie, $HEADERS_VAR:ContentType,$HEADERS_VAR:Connection, $HEADERS_VAR:Accept-Encoding.

Một vài Rules mẫu:


MainRule "str:/manager/html/upload" "msg:DN SCAN Tomcat" "mz:URL" "s:$UWA:8"
id:42000217 ;
 MainRule "rx:type( *)=( *)[\"|']symbol[\"|']" "msg:DN APP_SERVER Possible RAILS
Exploit using type=symbol" "mz:BODY" "s:$ATTACK:8" id:42000233 ;
 MainRule "str:basic ywrtaw46ywrtaw4=" "msg:APP_SERVER Tomcat admin-admin
credentials"
"mz:$URL/manager|$HEADERS_VAR:Authorization"
"s:$ATTACK:8"
id:42000216 ;

9



MainRule "str:http://" "msg:http:// scheme" "mz:ARGS|BODY|$HEADERS_VAR:Cookie"
"s:$RFI:8" id:1100 ;
 MainRule
"str:/*"
"msg:mysql
comment
(/*)"
"mz:BODY|URL|ARGS|$HEADERS_VAR:Cookie" "s:$SQL:8" id:1003 ;

10

Cài đặt và cấu hình
a. Cài đặt
NAXSI là một module được phát triển riêng, do đó để cài đặt NAXSI và Nginx
các bạn phải biên dịch (compile) Nginx từ source code, chứ không thể cài đặt qua
YUM hay APT-GET.
Sau đây, xin giới thiệu cách cài Nginx và Naxsi trên Cenos 6.5.
Chú ý: Tất cả thực hiện dưới quyền root.
-

Cài các gói cần thiết:

yum -y install gcc gcc-c++ make zlib-devel pcre-devel openssl-devel
-

Tải và giải nén Nginx (1.9.3), Naxsi (0.54rc3) bằng các lệnh sau :

cd /usr/local/src/
wget http://nginx.org/download/nginx-1.9.3.tar.gz
tar -zxvf nginx-1.9.3.tar.gz
wget https://github.com/nbs-system/naxsi/archive/0.54rc3.tar.gz
tar -zxvf 0.54rc3
-

Ta được các file và thư mục sau:

-

Tiếp theo các bạn tiến hành compile Nginx source kèm với NAXSI module.
Quan trọng trong câu lệnh có dòng “--add-module=../naxsi-0.54rc3/naxsi_src/”
để thực hiện việc gán thêm module vào Nginx. Thực hiện các lệnh compile
như sau:

cd nginx-1.9.3
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --confpath=/etc/nginx/nginx.conf --add-module=../naxsi-0.54rc3/naxsi_src/ --error-logpath=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pidpath=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp11

path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temppath=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp -user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --withhttp_addition_module --with-http_sub_module --with-http_dav_module --withhttp_flv_module --with-http_mp4_module --with-http_gunzip_module --withhttp_gzip_static_module --with-http_random_index_module --withhttp_secure_link_module --with-http_stub_status_module --withhttp_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --withipv6 --with-http_spdy_module --with-cc-opt='-O2 -g -pipe -Wp,D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 m64 -mtune=generic'
make
make install
Vậy là xong quá trình cài Nginx và Naxsi vào máy.
Cấu hình
Xong quá trình cài đặt Nginx và Naxsi vào máy. Giờ sẽ qua cấu hình để Naxsi
chạy được trên Nginx.
Để hoạt động thì NAXSI cần 2 files, một file chứa các rules và một file cấu hình
sử dụng NAXSI. Sau khi cài đặt xong các bạn cần sao chép file chứa rules của
NAXSI vào thư mục cấu hình Nginx. Các bạn thực hiện các lệnh sau:
cp /usr/local/src/naxsi-0.54rc3/naxsi_config/naxsi_core.rules /etc/nginx/ -fv
Tiếp theo mở file /etc/nginx/nginx.conf, chuyển tới phần http{} và include file
naxsi_core.rules vào ngay dòng đầu tiên của http{} để thông báo cho Nginx biết các
rules này nằm ở đây.
nano /etc/nginx/nginx.conf

12

Sau khi include file naxsi_core.rules thì có nghĩa là Nginx để biết các rules sẽ nằm
ở đâu. Công việc tiếp theo của mình là cấu hình cho Nginx sử dụng các rules này như
thế nào.
Giờ các bạn tiến hành mở file /etc/nginx/naxsi.rules
nano /etc/nginx/naxsi.rules
Sau đó thì cấu hình file naxsi.rules
# Bật NAXSI module
SecRulesEnabled;
# URL trả về khi client bị block
DeniedUrl "/RequestDenied";
# Số lần phát hiện dẫn đến block
CheckRule "$SQL >= 8" BLOCK;
CheckRule "$RFI >= 8" BLOCK;
CheckRule "$TRAVERSAL >= 4" BLOCK;
CheckRule "$EVADE >= 4" BLOCK;
CheckRule "$XSS >= 8" BLOCK;
Mở lại file nginx.conf và thêm vào các dòng như trong hình:
13

Vậy là xong phần cấu hình. Giờ ta cần làm một số thao tác để chạy dịch vụ Nginx.
-

Tạo tài khoản hệ thống Nginx:

useradd -r nginx
-

Tạo file nginx trong đường dẫn sau “/etc/init.d/nginx” và thêm nội dung file
như sau:

#!/bin/sh
#
# nginx - this
#
# chkconfig:
# description:
#
# processname:
# config:
# pidfile:
# user:

script starts and stops the nginx daemin
- 85 15
Nginx is an HTTP(S) server, HTTP(S) reverse \
proxy and IMAP/POP3 proxy server
nginx
/etc/nginx/nginx.conf
/var/run/nginx.pid
nginx

# Source function library.
. /etc/rc.d/init.d/functions

14

# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
lockfile=/var/run/nginx.lock
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}

15

force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|tryrestart|reload|force-reload|configtest}"
exit 2

16

esac

-

Thêm lệnh sau:

chmod +x /etc/init.d/nginx
-

Thiết lập dịch vụ khởi động cùng hệ thống:

chkconfig --add nginx
chkconfig --level 345 nginx on
-

Thay đổi các giá trị trong file nginx.conf:

types_hash_bucket_size 64;
server_names_hash_bucket_size 128;

17

-

Tạo đường dẫn sau “/var/cache/nginx/client_temp”:

-

Khởi động dịch vụ Nginx:

service nginx start

18

Chúng ta kiểm tra kết quả:

19

Thử kiểm tra với đường dẫn sau:
http://127.0.0.1/?a=%3C

Sau khi nhập vào thì đường dẫn có vấn đề thì Naxsi sẽ kiểm tra và Nginx trả về
lỗi như hình trên. Chúng ta kiểm tra nội dung mà naxsi bắt lỗi tại file
naxsi_error.log

20