[Question] ngăn chặn local thông qua mysql |
07/09/2006 23:46:45 (+0700) | #1 | 21433 |
|
baothu
Elite Member
|
0 |
|
|
Joined: 15/09/2003 02:42:15
Messages: 57
Offline
|
|
Mýql 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;
Code:
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 |
|
|
|
|
|
|
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|