Địa chỉ: 14 Tôn Thất Đạm, phường Nguyễn Thái Bình, quận 1, TP. Hồ Chí Minh               Đường dây nóng: 0918 956 456      

Hiện nay việc website bị tấn công rất phổ biến. nhất là các website sử dụng php và các opensource phổ biến. Bài viết sau sẽ giúp cho các bạn có thêm kinh nghiệm cấu hình hệ thống, chủ yếu là trên nền tảng website và một số tuỳ chỉnh trong cpanel để phần nào hạn chế việc tấn công của các hacker.

Chống Hack Website Local Attack

Hiện nay có rất nhiều diễn đàn bị Local Attack và dẫn đến hiện tượng down forum rất nhiều . Bài hướng dẫn này không hoàn toàn có thể giúp các bạn chống được Local Attack mà chỉ hạn chế được phần nào. Nguyên nhân bị Local do những sai lầm chết người của các Admin, ngay cả VNMagic cũng mắc sai lầm rất đáng trách .

 
- CHMOD sai, Forum của VNMagic CHMOD file conf_global.php là 666 do đó dễ dàng bị Edit file và lỗi này được Tiểu Quái Nhỏ khai thác liên tục mà Kingasawa không hề sửa đổi . Bản thân thư mục CHMOD la 755 do đó trên Server Linux, Config ko kỹ thì toàn bộ cấu trúc Folder và nội dung File đều có thể View được.
- Cấu trúc Forum ko có nhiều sửa đổi so với bản gốc nên attacker có thể dễ dành đoán biết vị trí các file quan trọng cần để lấy thông tin .
- Các thông tin quan trọng không hề được mã hóa .(cái này thì hạn chế một chút )
- Các thông tin quan trọng và các Action can thiệp đến CSDL ko được bảo vệ bởi các firewall

Thực ra Local Attack có thể làm được rất nhiều thứ nguy hiểm hơn và khả năng chống cự là không thể nếu như bạn ko Zendcode và không có một Server tốt (có thể chống được Remview, CGI Telnet==> đây là hai công cụ Local rất tốt, chưa kể đến SSH Local nếu có Shell) Do đây là bài viết về bảo mật vả lại cũng ko muốn phổ biến kỹ thuật Hack nguy hiểm này nên tôi chỉ trình bày sơ qua các nguyên nhân dẫn đến tình trạng bị Local Attack rất phổ biến hiện nay ở VN .

Từ các phân tích trên có một số khuyến nghị tôi xin đưa ra để mọi người khắc phục :

- Mã hóa thông tin, các bạn có thể mã hóa thông tin lại và việc này sẽ vô hiệu hóa được việc các thông tin quan trọng của bạn bị đánh cắp . Tôi sẽ cho các bạn download Zendcode miễn phí của Matrix, có đầy đủ License, các bạn Load tại đây nhé : http://218.199.86.231/ftp/ZendSafeGu...ndows-i386.zip
- CHMOD cho đúng, các bước sau đây rất quan trọng để bạn chống Local nên đề nghị các bạn chú ý thực hiện cho đúng :
+ CHMOD thư mục Public_html thành 710 thay vì 750 mặc định việc này sẽ giúp bạn bảo vệ được cấu trúc Website của mình.
+ CHMOD thư mục là 701 và cố gắng đừng bao giờ CHMOD 777, có một số folder ko quan trọng, bạn có thể CHMOD 755 để có thể hiện thị đúng và đầy đủ một số nội dung trong Folder đó .
Chú ý thế này, một số Server hỗ trợ CHMOD thư mục được 101, nếu Server của bạn hỗ trợ cái này thì hãy sử dụng nó, vì biện pháp CHMOD này rất an toàn, đến ngay cả Owner cũng ko thể xem được cấu trúc Folder ngay cả khi vào FTP. Hiện tôi chỉ thấy có Server của Eshockhost.net là hỗ trợ cái này
+ CHMOD File là 604 và nhớ rằng đừng bao giờ để là 666 nếu có việc cần 666 thì bạn CHMOD tạm để sử dụng lúc đó, sau đó hãy CHMOD lại ngay. Đối với các Server hỗ trợ CHMOD file 404 bạn hãy CHMOD như vậy, ví dụ Server Eshockhost.net
- Thay đổi cấu trúc, tên file mặc định có chứa các thông tin quan trọng . Nếu có thể hãy thay đổi cả cấu trúc CSDL nếu bạn làm được .
- Thiết lập các tường lửa truy cập Admin mà ko sử dụng đến CSDL, mã hóa User/Pass thì càng tốt, ngoài ra có hệ thống kiểm tra tác vụ của MOD, Admin ... nếu quyền hạn xác nhận mới được thực hiện (cái này Matrix sử dụng rất thành công) . Trên đây là hướng dẫn từng bước giúp các bạn cố gắng chống Local attack, dù sao đây cũng chỉ là hướng dẫn cơ bản, trong quá trình thực hiện, các bạn nên linh động hơn một chút, nếu có thêm ý tưởng gì mới thì hãy cùng nhau thảo luận tại đây. Hy vọng bài viết sẽ giúp các Admin bảo mật tốt hơn diễn đàn của mình. Thanks vì đã đọc bài viết

Ngoài ra
-Vbb thì chmod 711 files config.php nằm trong thư mục includes
-Với IBP thì chmod file conf_global.php
-Với wordpress thì chmod 711 files wp_config.php
-Với Joomla thì chmod 711 configuration.php
Nói tóm lại bạn chmod lại thành 711 đối với tất cả các file chứa thông tin database
CHMOD 704 (chỉ cho phép đọc) cho tất cả các file
CHMOD 701 (chỉ cho phép thực thi) cho tất cả các folder

Còn đối với những file nhạy cảm như config.php chẳng hạn CHMOD 111, nếu CHMOD 111 ko chạy, bạn nâng lên 501.
Neu CHmode bằng FTP ko được thì bạn dùng Control panel Chmod hoặc nhờ admin nhé

link tham khảo :
http://www.eukhost.com/forums/f42/se...-servers-5319/
http://www.mysql-apache-php.com/fileupload-security.htm
http://www.greensql.net/publications...best-practices


Trước mắt để tránh local ( Cụ thể là symlink...) có thể thực hiện theo hướng dẫn.

Symlink : Liên kết thông qua một biểu tượng, tham chiếu tới một file hoặc một thư mục. Tương tự như tạo shortcut trong Windows.
Hàm này được sử dụng trong thời gian vừa qua để tiến hành attack local rất khó chống đỡ. Để khắc phục 1 phần tình trạng này các anh có thể tiến hành chmod file và folder của mình:
- Với file chmod 404 ( r-----r-- )
- Với folder chmod 701 ( rw------x )
Tiến hành tạo file .htaccess với nôi dung:

 
Mã:
<Files "config.php">Order Deny,AllowDeny from All</Files>
Upload file này vào folder /home/username/.htaccess để có hiệu lực cho toàn website. Phần <Files "config.php"> anh có thể đổi lại tên của file cần bảo vệ.
Ở các thư mục images (thường được set 777) hacker có thể lợi dụng up shell hình ảnh .jpg .gif lên .Thì cần làm .htaccess như sau ,chmod 400 với htaccess
 
Mã:
<Files ~ "^.*\.(php|cgi|pl|php3|php4|php5|php6|phtml|shtml)">Order allow,denyDeny from all</Files>
hoặc
 
Mã:
<Files ^(*.jpeg|*.jpg|*.png|*.gif)>order deny,allowdeny from all</Files>



chặn chạy các script trong thư mục upload
Options -Indexes
Options -ExecCGI
AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi
Còn về phần SQL injection, anh phải lọc dữ liệu đầu vào trước khi thực hiện truy vấn.
Có thể dùng hàm:

+ addslashes: hàm này sẽ trả về một chuỗi với dấu \ trước các ký tự cần trích dẫn trong Database, các ký tự đó là " \ và NUL (\0) .
- Cấu trúc hàm addslashes : string addslashes ( string str) ...
+ Lọc biến đầu vào đơn giản bằng cách nhân nó với 1



Mysql như chúng ta đã biết là một DBMS rất phổ biến ,chung quy chia ra làm 4 loại:
* MySQL Standard includes the standard storage engine, as well as the InnoDB storage engine, which is touted as a “transaction-safe, ACID-compliant database” with some additional features over the standard version.
* MySQL Pro is the commercial version.
* MySQL Max includes the more technologically advanced features that are available during early access programs.
* MySQL Classic is the standard storage engine without the InnoDB engine. This is another commercial version.
Đội ngũ phát triển Mysql vì muốn nâng cao khả năng tiện dụng của mysql mà đã đưa thêm một số function có nguy cơ tìm tàng đối với vấn đề bảo mật của server .
Chúng ta hẳn đã nghe nói đến hình thức local qua mysql ?.Xem thử một ví dụ như sau :
(giả định attacker có một mysql user có quyền tạo ,chỉnh sửa, thêm xoá DB trên sever )
Code:

use atttacker; Create table readfile(text LONGTEXT); Insert into readfile values(loadfile('/etc/passwd');

Result:
Select * from readfile;
Mã:
root:0:0:root:/root:/bin/bash bin:1:1:bin:/bin:/sbin/nologin daemon:2:2:daemon:/sbin:/sbin/nologin adm:3:4:adm:/var/adm:/sbin/nologin lp:4:7:lp:/var/spool/lpd:/sbin/nologin sync:5:0:sync:/sbin:/bin/sync shutdown:6:0:shutdown:/sbin:/sbin/shutdown halt:7:0:halt:/sbin:/sbin/halt mail:8:12:mail:/var/spool/mail:/sbin/nologin news:9:13:news:/etc/news: uucp:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:11:0:operator:/root:/sbin/nologin games:12:100:games:/usr/games:/sbin/nologin gopher:13:30:gopher:/var/gopher:/sbin/nologin ftp:14:50:FTP User:/var/ftp:/sbin/nologin nobody:99:99:Nobody:/:/sbin/nologin vcsa:69:69:virtual console memory owner:/dev:/sbin/nologin rpm:37:37::/var/lib/rpm:/sbin/nologin netdump:34:34:Network Crash Dump user:/var/crash:/bin/bash nscd:28:28:NSCD Daemon:/:/sbin/nologin ident:100:101::/home/ident:/sbin/nologin sshd:74:74rivilege-separated SSH:/var/empty/sshd:/sbin/nologin rpc:32:32ortmapper RPC user:/:/sbin/nologin mailnull:47:47::/var/spool/mqueue:/sbin/nologin smmsp:51:51::/var/spool/mqueue:/sbin/nologin pcap:77:77::/var/arpwatch:/sbin/nologin xfs:43:43:X Font Server:/etc/X11/fs:/sbin/nologin canna:39:39:Canna Service User:/var/lib/canna:/sbin/nologin wnn:49:49:Wnn Input Server:/var/lib/wnn:/sbin/nologin mysql:101:102:MySQL server:/var/lib/mysql:/bin/bash named:25:25:Named:/var/named:/sbin/nologin
Một số bạn tự hỏi rằng : Quái? Sao server được hardening cẩn thận rồi ,php : safe_mod on ,đã set open_basedir ,disable function tá lả mà nó vẫn local được ? .Rất có thể admin quản trị server đã bỏ quên ,chưa chăm sóc đến anh chàng mysql này. Vậy vấn đề của chúng ta là tìm ra các nguy cơ từ tính tiện dụng của mysql , đứng ở góc nhìn của customer (đặt trường hợp bạn quản trị một server cung cấp shared host) xem họ có cần thiết phải sử dụng các chức năng đó hay ko ,và Attacker sẽ làm gì khi họ có được một mysql user ,sau đó ta sẽ triển khai giải pháp hạn chế ,ngăn ngừa nguy cơ này.
Ta hãy xem xét qua các function của mysql . Vậy trong các function này ,cái nào có nguy cơ bảo mật nhất ?
Mysql có 3 hàm có khả năng thao tác file là load_file() ,load data infile và dumpfile.
Trước tiên hãy xem qua hàm load_file();
Hàm này có cú pháp như sau :
LOAD_FILE(file_name)
Công dụng của hàm này là đọc và trả về giá trị của file như một chuỗi . Xem manual page của mysql ,bạn sẽ thấy hàm này cần vài điều kiện để có thể thực thi
To use this function, the file must be located on the server host, you must specify the full pathname to the file, and you must have the FILE privilege. The file must be readable by all and its size less than max_allowed_packet bytes.
 
Đầu tiên ,user (mysql) phải có File Privilege ,kế đến fiel này phải readable by all. Đây là 2 chìa khoá để ta chốt cổng ,không cho attacker chui vào ) . Hãy đặt mình dưới góc độ của một customer thuê host bình thường ,khi họ muốn thao tác file có thể xảy ra 2 trường hợp :
1 dùng php or perl ,cgi ,asp để manipulate
2 là dùng Ftp để chỉnh sửa trực tiếp
Vậy thì File privilege hoàn toàn không cần thiết cho một user bình thường sử dụng .Để ngăn chặn nguy cơ từ hàm load_file() này ,bạn đơn giản chỉ việc disable file privilege của toàn bộ user trong mysql .
Kế đến ta xem xét tiếp chức năng load data infile;
Hàm này có cú pháp như sau :
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name,...)]
 
(bài viết này giả định bạn đã có kiến thức về mysql ,ở đây ta ko bàn đến cú pháp hay cách dùng hàm)
Hàm này cũng có công dụng tương tự load_file() nhưng run với tốc độ khá nhanh . Ngoài ra còn có thêm từ khoá "Local" .Trong trường hợp từ khóa local được thêm vào query . Mysql sẽ đọc file trên client và gửi nó về server. Đa số server hiện nay đều set trên localhost nên việc có hay ko local cũng ko quan trọng lắm .Hãy xem sơ qua điều kiện để hàm này có thể thi hành :
For security reasons, when reading text files located on the server, the files must either reside in the database directory or be readable by all. Also, to use LOAD DATA INFILE on server files, you must have the FILE privilege
Vẫn chiếc chìa khoá vàng File privilege ,bạn có thể ngăn chặn được khả năng readfile từ mysql .
Việc dumpfile hiếm server nào cho phép nên ta không bàn tới
Kết luận :
Mysql là một DBMS thực sự mạnh mẽ vì tính tiện dụng và sức mạnh của nó nhưng vì một số hàm tiện dụng quá lại trở thành mối nguy cơ tiềm tàng cho attacker lợi dụng . Hy vọng sau bài viết nho nhỏ này ,bạn có thể nâng cao mức bảo mật của hệ thống .Các thiếu sót mong được mọi người góp ý
thân



Cách Chống Local Attack:
Thường xuyên backup dữ liệu (giảm thiệt hại khi bị drop database)
-Bỏ quyền DROP database của user
-đặt safemode on và disable 1 số hàm nguy hiểm = cách tạo file php.ini với nội dung sau
safe-mode = on
display_errors = Off
disable_functions = passthru, system, shell_exec, exec, dir, readfile, virtual,socket_accept,socket_bind,socket_clear_err or,socket_close,socket_connect,socket_create_liste n
proc_terminate
log_errors = On

Rồi up lên thư mục public_html, sau đó cmod thành 444
---Đổi tên,đặt pass cho thư mục admincp:
Đổi tên admincp và nhưng đừng sửa lại trong file config.php tên mới nhé,ví dụ là !!!!aaaad@.Thay vào đó,bạn làm như sau:tạo 1 thư mục khác,lấy tên là "admincp" ,sau đó copy toàn bộ file trong thư mục "!!!!aaaad@" qua thư mục này,sau đó,mở từng file 1 ra,sửa lung tung lên(cốt để cho file đấy không chạy đc),nhưng đừng sửa file index.php là đượcc.Sau đó vào cpanel, đặt pass cho thư mục "!!!!aaaad@" và thư mục "admincp"
Giải thích qua về tác dụng của việc này: nếu như hacker biết đc pass admin,muốn vào admincp thì chắc chắn sẽ vào yourforum/admincp ,sau đó sẽ phải tìm cách vượt qua pass protect,nếu có vượt qua đc,đăng nhập vào thì cũng chả làm được gì(bởi vì tất cả các file trong thư mục "admincp" ta đã sửa )
---Di chuyển vị trí file config.php:
Việc này là 1 việc rất quan trọng,vì giả sử hacker có up shell lên đc thì cũng phải có user và pass thì mới connect đc đến database.Bạn làm như sau:
----B1: zend file config.php lại,đổi tên thành 1 file khác,chẳng hạn a.php,rồi chuyển vào 1 thư mục nào đó ngoài thư mục public_html là đc.VD:

---B2: tạo 1 file khác tên là config.php với nội dung sau:VD:
<?php include "/home/lyamsinfo/php/a.php" ?>

Nhớ thay /home/lyamsinf/php/config.php = đường dẫn đến file a.php của bạn.Sau đó tiếp tục zend file này lại.
----B3: Tiếp tục di chuyển file "config.php"(file trong thư mục includes ấy nhé)đến 1 vị trí khác(dĩ nhiên là ngoài thư mục public_html)
Mở file "class_core.php" trong thư mục "includes",sửa lại đường dẫn đến file "config.php".Làm tương tự với file "diagnostic.php" trong thư mục "!!!!aaaad@"(thư mục admincp đã đổi tên).Rồi zend 2 file "diagnostic.php" và "class_core.php".
Sau đó nhớ vào thư mục includes,tạo 1 file config.php "giả",điền sai thông tin user,pass đăng nhập database lại và cũng zend lại được.
Thế là ta đã giấu file config.php thật 1 cách khá kĩ đó,hacker sẽ khá nản khi muốn mò đc file config.php thật!Như vây là tạm thời yên tâm về thông tin đăng nhập database ko bị mất nữa!

Cách tối thượng :

Mua luôn 1 server mà sài riêng nếu bạn có xiền

 

 

Khách hàng chúng tôi

biberon.pngdaitrangia.pngdonhanhpaint.pnghdhot.pngiberrys.pngminhtancomputer.pngphimhd.pngsongthuong.pngtraginet.pngtruongminhgiang.pngvtj.png