BY Vũ Thành Lai SVIT!
Do tình hình đạo tặc ngày càng nhìu, số lượng anh em bị tấn công ngày tăng
->Viết cái tut hướng dẫn anh em bảo mật website tốt hơn. Nếu làm theo
mình + server config tốt thì sẽ chắc chắn giảm đc 99% nguy cơ bị local
attack
Ở đây mình nói là bảo mật cho website chứ ko phải là forum, tức là bạn hãy vận dụng những gì mình viết tiếp sau đây cho toàn bộ website của bạn, ko cần biết bạn đang dùng forum hay blog hay .....
Tuy nhiên, do số đông anh em đang xài forum vBulletin nên mình lấy mã nguồn vBulletin coi như làm mẫu.
Bây giờ chúng ta bắt đầu:
Mình sẽ nói sơ qua các bước ta sẽ tiến hành.
1. Thay đổi vị trí file chứa thông tin database (file config.php)
2. Thủ thuật bảo vệ file config.php
3. CHMOD bảo vệ các vùng nằm trong tầm ngắm của Attacker
4. Đổi vị trí AdminCP
5. Bảo vệ vùng AdminCP bằng htaccess
6. Cấu hình phân quyền user trên database
7. 1 số lời khuyên
Trước khi tiến hành các bạn hãy kiểm tra lại code của mình đã bị dính
shell chưa, vì nếu dính rồi thì có làm cách mấy cũng có thể bị attack mà
thôi
+ Vào admincp, vào mục Plugin manager xem có plugin nào lạ ko ? Nhất là các Plugin thuộc Product vBulletin
+ Xem thêm bài này: [You must be registered and logged in to see this link.]
+ Down toàn bộ code về máy, dùng 1 trình antivirus mạnh quét qua code xem có phát hiện gì ko ?
Mình khuyên dùng Avira 10: [You must be registered and logged in to see this link.]
Đăng ký bản quyền: [You must be registered and logged in to see this link.]
1 & 2. Thay đổi vị trí file chứa thông tin database (file config.php) & thủ thuật bảo vệ file này
*Lưu ý: Đối với các bạn dùng mod
VbSEO thì ko nên làm việc thay đổi vị trí file config.php vì Vbseo có
dùng tới file này. việc thay đổi sẽ gây lỗi. Và mình cũng khuyên ko nên
dùng VBseo nếu các bạn xài shared host haty VPS vì nó cức kì tiêu tốn tài nguyên server
- Bạn tạo 1 thư mục ngang hàng thư mục includes với tên bất kỳ, thư mục này sẽ chứa file config.php sau này.
Tuy nhiên bạn lưu ý, thư mục mới này mình sẽ tạo tên có dấu # ở đầu. VD, mình tạo thư mục tên là
Code:
#skin
*Lưu ý: chỉ host linux mới làm đc việc này, còn host windows thì ko. Bạn hãy tạo thư mục này thông qua ftp
Tiếp theo,Bạn mở file includes/class_core.php
Tìm
PHP Code:
includes/config.php
thay bằng
PHP Code:
#skin/config.php
* Bạn sẽ tìm thấy 3 chỗ để thay (bao gồm 2 chỗ là code , 1 chỗ là chú thích)
Giải thích: Tên thư mục có dấu # ở đầu sẽ hạn chế đc rất nhiều nguy cơ attack, vì sao ?
Vì # là dấu phân cách địa chỉ đặc biệt, Ví dụ:
[You must be registered and logged in to see this link.]
-> trình duyệt sẽ chỉ gửi yêu cầu tới file [You must be registered and logged in to see this link.] và khi trang load xong nó sẽ cuộn thanh cuốn tới thẻ có ID là cntt
Như vậy nếu kẻ nào đó dùng shell đọc file config.php chằng hạn
Nếu theo cách bình thường thì nó sẽ gọi như sau:
Code:
http://victim/c99.php?act=f&f=config.php&d=/home/user/public_html/forum/#skin
ở đây mình ví dụ với shell c99 , như bạn thấy trong link trên dấu # đã phân cách chuỗi skin ra khỏi link
Vậy link trên sẽ tương đương link sau
Code:
http://victim/c99.php?act=f&f=config.php&d=/home/user/public_html/forum/
-> ko còn đúng nữa, -> ko đọc đc nội dung file config.php
3. CHMOD bảo vệ các vùng nằm trong tầm ngắm của Attacker
* Đối với các bạn dùng host cPanel, mình khuyên các bạn CHMOD 400 cho file #skin/config.php , includes/class_core.php
* Đối với các bạn dùng host DirectAdmin, mình khuyên các bạn CHMOD 004 cho file #skin/config.php , includes/class_core.php
Sau khi chmod cho 2 file này xong
* Đối với các bạn dùng host cPanel, mình khuyên các bạn CHMOD 100 cho thư mục #skin và includes
* Đối với các bạn dùng host DirectAdmin, mình khuyên các bạn CHMOD 001 cho thư mục #skin và includes
Đây là 2 mức thấp nhất có thể chấp nhận đối với host. Bạn sẽ ko CHMOD đc qua ftp mà phải CHMOD thông qua hosting
controler (DirectAdmin,cPanel ..) Khi CHMOD như vậy chính các bạn cũng
ko truy cập đc tới các file và thư mục này, do đó khi muốn chỉnh sửa thì
các bạn hãy chmod lại như ban đầu (file 644, thư mục 755) mới đoc hay
backup đc
4. Đổi vị trí AdminCP
Mở file config.php tìm dòng
PHP Code:
$config['Misc']['admincpdir'] = 'admincp';
Thay bằng
PHP Code:
$config['Misc']['admincpdir'] = 'style';
chẳng hạn
SAu đó bạn dùng vào host đổi thư mục admincp thành style
Vậy bây giờ để vào admincp bạn ko vào bằng domain.com/forum/admincp/ nữa mà là domain.com/forum/style/
5. Bảo vệ vùng AdminCP bằng htaccess
Cái này các bạn có thể tham khảo bài này:
[You must be registered and logged in to see this link.]
Mình xin hướng dẫn lại đối với hosting DirectAdmin và cPanel
a. cPanel, các bạn login vào host tìm tới mục sau:
Bạn duyệt tới thư mục cần bảo vệ, Bạn click vào biểu tường folder để vào
típ thư mục trong. Click vào tên thư mục để cấu hình. Ở đây mình click
vào biểu tượng folder vì thư mục admincp nằm trong thư mục này
Click vào thư mục admincp để cấu hình bảo vệ
Nhập thông báo ở cửa sổ đăng nhập khi người dùng vào thư mục này
Cấu hình username và mật khẩu
a. DirectAdmin, các bạn login vào host tìm tới mục sau:
Duyệt tới nơi có thư mục cần bảo vệ
Cấu hình thông tin đăng nhập
1 thư mục có thể thêm nhiều user, muốn quản lý hoặc sửa mật khẩu bạn vào mục sau
Và đây là kết quả:
Nếu đăng nhập thất bại hoặc Bấm Cancel
6. Cấu hình phân quyền user trên database
Đối với các hệ quản trị CSDL, mỗi user đều được phân cho 1 quyền hạn cố
định. Khi tạo user cho database thì ta cũng phải phân quyền cho nó, phân
cho nó có những quyền gì trên database này.
Theo thông thường, các bạn thường cho full quyền. Song có 1 số quyền ta
ít dùng tới nhưng lại đc Attacker lợi dụng để Drop database. Đó là quyền
DROP.
Vì vậy để hạn chế nguy cơ database bị Drop sạch sẽ khi Attacker lấy đc thông tin tài khoản Database ta sẽ bỏ quyền này đi.
a. Đối với host cPanel
Khi Add user vào database các bạn chú ý chỗ này:
b. Đối với DirectAdmin
Bạn Login vào host tìm tới mục sau
Chọn Database
Bấm vào Modify Privileges để phân quyền
Bỏ quyền Drop đối với user
7. 1 số lời khuyên
+ Khi biết mình có nguy cơ tấn công, hãy nhanh chóng Backup toàn bộ database và các file trên host (Ưu tiên database trước)
Xem thêm các Backup data ko bị lỗi: [You must be registered and logged in to see this link.]
+ Thường xuyên backup database, hãy backup ở mức thường xuyên nhất có thể
+ Luôn để 1 bản sao y chang trên host ở máy mình
+ Thường xuyên theo dõi website, log, bảng điều khiển xem có gì lạ bất thường ko
+ Hãy giữ Password thật kỹ, tránh để lộ pass và nên thay đổi pass ngay nếu cảm thấy mình có thể đã bị lộ. Nhất là pass email
+ Khi đổi vị trí file config.php bạn ko nên đi chuyển hẳn file config.hp
mà hãy để lại includes 1 bản sao file config.php với thông tin database
ko đúng. Nếu có thể hãy tạo 1 databse giả và cho vào file config này
thông tin của database giả luôn.
+ Những biên pháp mình nêu bên trên chỉ là tương đối, 1 attacker có kiến
thức thực sự sẽ biết các vượt qua những gì mình nói. Tuy nhiên, đại đa
số các attacker deface nạn nhân đều là những bạn tuổi đời còn trẻ với
khát vọng khám phá và thử nghiệm những gì mới biết, kiến thức nắm chưa
thật sâu nên giúp bạn có thể an toàn
Trích:
Database giả ở đây mình nói là database bạn tạo ra thật, có
đầy đủ các table của code nhưng nội dung ít hoặc ko có, mình sẽ ko sử
dụng database này. DO đó nếu attacker có nằm đc info database này cứ cho
nó tự sướng với cái data ko có giá trị
Do tình hình đạo tặc ngày càng nhìu, số lượng anh em bị tấn công ngày tăng
->Viết cái tut hướng dẫn anh em bảo mật website tốt hơn. Nếu làm theo
mình + server config tốt thì sẽ chắc chắn giảm đc 99% nguy cơ bị local
attack
Ở đây mình nói là bảo mật cho website chứ ko phải là forum, tức là bạn hãy vận dụng những gì mình viết tiếp sau đây cho toàn bộ website của bạn, ko cần biết bạn đang dùng forum hay blog hay .....
Tuy nhiên, do số đông anh em đang xài forum vBulletin nên mình lấy mã nguồn vBulletin coi như làm mẫu.
Bây giờ chúng ta bắt đầu:
Mình sẽ nói sơ qua các bước ta sẽ tiến hành.
1. Thay đổi vị trí file chứa thông tin database (file config.php)
2. Thủ thuật bảo vệ file config.php
3. CHMOD bảo vệ các vùng nằm trong tầm ngắm của Attacker
4. Đổi vị trí AdminCP
5. Bảo vệ vùng AdminCP bằng htaccess
6. Cấu hình phân quyền user trên database
7. 1 số lời khuyên
Trước khi tiến hành các bạn hãy kiểm tra lại code của mình đã bị dính
shell chưa, vì nếu dính rồi thì có làm cách mấy cũng có thể bị attack mà
thôi
+ Vào admincp, vào mục Plugin manager xem có plugin nào lạ ko ? Nhất là các Plugin thuộc Product vBulletin
+ Xem thêm bài này: [You must be registered and logged in to see this link.]
+ Down toàn bộ code về máy, dùng 1 trình antivirus mạnh quét qua code xem có phát hiện gì ko ?
Mình khuyên dùng Avira 10: [You must be registered and logged in to see this link.]
Đăng ký bản quyền: [You must be registered and logged in to see this link.]
1 & 2. Thay đổi vị trí file chứa thông tin database (file config.php) & thủ thuật bảo vệ file này
*Lưu ý: Đối với các bạn dùng mod
VbSEO thì ko nên làm việc thay đổi vị trí file config.php vì Vbseo có
dùng tới file này. việc thay đổi sẽ gây lỗi. Và mình cũng khuyên ko nên
dùng VBseo nếu các bạn xài shared host haty VPS vì nó cức kì tiêu tốn tài nguyên server
- Bạn tạo 1 thư mục ngang hàng thư mục includes với tên bất kỳ, thư mục này sẽ chứa file config.php sau này.
Tuy nhiên bạn lưu ý, thư mục mới này mình sẽ tạo tên có dấu # ở đầu. VD, mình tạo thư mục tên là
Code:
#skin
*Lưu ý: chỉ host linux mới làm đc việc này, còn host windows thì ko. Bạn hãy tạo thư mục này thông qua ftp
Tiếp theo,Bạn mở file includes/class_core.php
Tìm
PHP Code:
includes/config.php
thay bằng
PHP Code:
#skin/config.php
* Bạn sẽ tìm thấy 3 chỗ để thay (bao gồm 2 chỗ là code , 1 chỗ là chú thích)
Giải thích: Tên thư mục có dấu # ở đầu sẽ hạn chế đc rất nhiều nguy cơ attack, vì sao ?
Vì # là dấu phân cách địa chỉ đặc biệt, Ví dụ:
[You must be registered and logged in to see this link.]
-> trình duyệt sẽ chỉ gửi yêu cầu tới file [You must be registered and logged in to see this link.] và khi trang load xong nó sẽ cuộn thanh cuốn tới thẻ có ID là cntt
Như vậy nếu kẻ nào đó dùng shell đọc file config.php chằng hạn
Nếu theo cách bình thường thì nó sẽ gọi như sau:
Code:
http://victim/c99.php?act=f&f=config.php&d=/home/user/public_html/forum/#skin
ở đây mình ví dụ với shell c99 , như bạn thấy trong link trên dấu # đã phân cách chuỗi skin ra khỏi link
Vậy link trên sẽ tương đương link sau
Code:
http://victim/c99.php?act=f&f=config.php&d=/home/user/public_html/forum/
-> ko còn đúng nữa, -> ko đọc đc nội dung file config.php
3. CHMOD bảo vệ các vùng nằm trong tầm ngắm của Attacker
* Đối với các bạn dùng host cPanel, mình khuyên các bạn CHMOD 400 cho file #skin/config.php , includes/class_core.php
* Đối với các bạn dùng host DirectAdmin, mình khuyên các bạn CHMOD 004 cho file #skin/config.php , includes/class_core.php
Sau khi chmod cho 2 file này xong
* Đối với các bạn dùng host cPanel, mình khuyên các bạn CHMOD 100 cho thư mục #skin và includes
* Đối với các bạn dùng host DirectAdmin, mình khuyên các bạn CHMOD 001 cho thư mục #skin và includes
Đây là 2 mức thấp nhất có thể chấp nhận đối với host. Bạn sẽ ko CHMOD đc qua ftp mà phải CHMOD thông qua hosting
controler (DirectAdmin,cPanel ..) Khi CHMOD như vậy chính các bạn cũng
ko truy cập đc tới các file và thư mục này, do đó khi muốn chỉnh sửa thì
các bạn hãy chmod lại như ban đầu (file 644, thư mục 755) mới đoc hay
backup đc
4. Đổi vị trí AdminCP
Mở file config.php tìm dòng
PHP Code:
$config['Misc']['admincpdir'] = 'admincp';
Thay bằng
PHP Code:
$config['Misc']['admincpdir'] = 'style';
chẳng hạn
SAu đó bạn dùng vào host đổi thư mục admincp thành style
Vậy bây giờ để vào admincp bạn ko vào bằng domain.com/forum/admincp/ nữa mà là domain.com/forum/style/
5. Bảo vệ vùng AdminCP bằng htaccess
Cái này các bạn có thể tham khảo bài này:
[You must be registered and logged in to see this link.]
Mình xin hướng dẫn lại đối với hosting DirectAdmin và cPanel
a. cPanel, các bạn login vào host tìm tới mục sau:
Bạn duyệt tới thư mục cần bảo vệ, Bạn click vào biểu tường folder để vào
típ thư mục trong. Click vào tên thư mục để cấu hình. Ở đây mình click
vào biểu tượng folder vì thư mục admincp nằm trong thư mục này
Click vào thư mục admincp để cấu hình bảo vệ
Nhập thông báo ở cửa sổ đăng nhập khi người dùng vào thư mục này
Cấu hình username và mật khẩu
a. DirectAdmin, các bạn login vào host tìm tới mục sau:
Duyệt tới nơi có thư mục cần bảo vệ
Cấu hình thông tin đăng nhập
1 thư mục có thể thêm nhiều user, muốn quản lý hoặc sửa mật khẩu bạn vào mục sau
Và đây là kết quả:
Nếu đăng nhập thất bại hoặc Bấm Cancel
6. Cấu hình phân quyền user trên database
Đối với các hệ quản trị CSDL, mỗi user đều được phân cho 1 quyền hạn cố
định. Khi tạo user cho database thì ta cũng phải phân quyền cho nó, phân
cho nó có những quyền gì trên database này.
Theo thông thường, các bạn thường cho full quyền. Song có 1 số quyền ta
ít dùng tới nhưng lại đc Attacker lợi dụng để Drop database. Đó là quyền
DROP.
Vì vậy để hạn chế nguy cơ database bị Drop sạch sẽ khi Attacker lấy đc thông tin tài khoản Database ta sẽ bỏ quyền này đi.
a. Đối với host cPanel
Khi Add user vào database các bạn chú ý chỗ này:
b. Đối với DirectAdmin
Bạn Login vào host tìm tới mục sau
Chọn Database
Bấm vào Modify Privileges để phân quyền
Bỏ quyền Drop đối với user
7. 1 số lời khuyên
+ Khi biết mình có nguy cơ tấn công, hãy nhanh chóng Backup toàn bộ database và các file trên host (Ưu tiên database trước)
Xem thêm các Backup data ko bị lỗi: [You must be registered and logged in to see this link.]
+ Thường xuyên backup database, hãy backup ở mức thường xuyên nhất có thể
+ Luôn để 1 bản sao y chang trên host ở máy mình
+ Thường xuyên theo dõi website, log, bảng điều khiển xem có gì lạ bất thường ko
+ Hãy giữ Password thật kỹ, tránh để lộ pass và nên thay đổi pass ngay nếu cảm thấy mình có thể đã bị lộ. Nhất là pass email
+ Khi đổi vị trí file config.php bạn ko nên đi chuyển hẳn file config.hp
mà hãy để lại includes 1 bản sao file config.php với thông tin database
ko đúng. Nếu có thể hãy tạo 1 databse giả và cho vào file config này
thông tin của database giả luôn.
+ Những biên pháp mình nêu bên trên chỉ là tương đối, 1 attacker có kiến
thức thực sự sẽ biết các vượt qua những gì mình nói. Tuy nhiên, đại đa
số các attacker deface nạn nhân đều là những bạn tuổi đời còn trẻ với
khát vọng khám phá và thử nghiệm những gì mới biết, kiến thức nắm chưa
thật sâu nên giúp bạn có thể an toàn
Trích:
Database giả ở đây mình nói là database bạn tạo ra thật, có
đầy đủ các table của code nhưng nội dung ít hoặc ko có, mình sẽ ko sử
dụng database này. DO đó nếu attacker có nằm đc info database này cứ cho
nó tự sướng với cái data ko có giá trị