Các kỹ thuật tấn công trên hệ quản trị cơ sở dữ liệu PostgreSQL - Học Viện Kỹ Thuật Mật Mã
Tổng quan về hệ quản trị cơ sở dữ liệu PostgreSQL. PostgreSQL là một hệ thống quản trị cơ sở dữ liệu quan hệ-đối tượng (object-relational database management system) có mục đích chung, hệ thống cơ sở dữ liệu mã nguồn mở tiên tiến nhất hiện nay. Tài liệu giúp bạn tham khảo và đạt kết quả cao. Mời bạn đọc đón xem!
Preview text:
LỜI NÓI ĐẦU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
PHẦN 1: THỰC TRẠNG VỀ AN TOÀN CSDL HIỆN NAY. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1. Thực trạng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
PHẦN 2: TỔNG QUAN VỀ POSTGRESQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1. Tổng quan về hệ quản trị cơ sở dữ liệu PostgreSQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2. Ưu điểm và nhược điểm của hệ quản trị cơ sở dữ liệu PostgreSQL. . . . . . . . . . . . . . . . . . . . . 4
PHẦN 3: BẢO MẬT TRONG HỆ QUẢN TRỊ CSDL POSTGRESQL. . . . . . . . . . . . . . . . . . . . . . 6
1. Bảo mật của PostgreSQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6
2. Các kỹ thuật tấn công PostgreSQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3. Một vài CVE của PostgreSQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
PHẦN 4: PHÂN TÍCH THỰC NGHIỆM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1. Xây dựng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
2. Xâm nhập. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1. Kịch bản 1: Cố gắng xâm nhập vào hệ thống qua thanh url bằng cách tiêm vào đó
những câu sql injection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2. Kịch bản 2: Sau khi đã xác định được website có lỗ hổng sql injection tiếp tục thực hiện
truy vấn và phá hỏng CSDL của website. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
3. Kết quả. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4. Phòng tránh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
TÀI LIỆU THAM KHẢO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 2 LỜI NÓI ĐẦU
Trong thời đại kỹ thuật số - nơi mọi thứ đều được kết nối và có thể truy
cập, sử dụng một cách dễ dàng thì khả năng dữ liệu bị rò rỉ cũng là rất lớn. Vì
vậy, việc bảo vệ an toàn cho cơ sở dữ liệu là một vấn đề rất quan trọng và cần
thiết. Bởi cơ sở dữ liệu là nơi chứa toàn bộ thông tin bao gồm cả những thông
tin nhạy cảm, bí mật của các tổ chức/doanh nghiệp… đây cũng là mục tiêu mà
tin tặc thường xuyên nhắm tới. Việc mất mát, sai lệch hoặc bị đánh cắp dữ liệu
đặc biệt là dữ liệu của khách hàng có thể ảnh hưởng đến danh tiếng và gây ra
những tổn thất tài chính nghiêm trọng.
Chính vì vậy, việc bảo vệ an toàn cho cơ sở dữ liệu là một trong những
ưu tiên hàng đầu của các tổ chức hiện nay. Tuy vậy, các kĩ thuật để đảm bảo an
toàn cho cơ sở dữ liệu cũng còn một vài thiếu sót. Trong các biện pháp đảm bảo
an toàn cho cơ sở dữ liệu thì mã hóa được coi là phương pháp phòng thủ sâu
nhất chống lại các lỗ hổng an toàn. Còn kiểm toán là hàng rào kỹ thuật cuối
cùng để bảo vệ cơ sở dữ liệu.
Bài báo cáo của chúng em đi tìm hiểu các kỹ thuật tấn công trên hệ quản
trị cơ sở dữ liệu PostgreSQL . Bài báo cáo của chúng em sẽ trình bày về hệ quản
trị CSDL PostgreSQL, các phương thức tấn công và thực nghiệm tấn công lỗ hổng SQL Injection
Nhóm chúng em xin chân thành cảm ơn cô …. đã hướng dẫn, chỉ dạy
chúng em để chúng em có thể hoàn thành bài báo cáo này một cách tốt nhất.
Mặc dù có nhiều cố gắng nhưng bài báo cáo của chúng em không thể
tránh khỏi nhiều thiếu sót. Chúng em rất mong nhận được sự góp ý, chỉ bảo của
cô để bài báo cáo của chúng em được hoàn thiện hơn.
Chúng em xin chân thành cảm ơn! Hà Nội, tháng 6 năm 2023 3
PHẦN 1: THỰC TRẠNG VỀ AN TOÀN CSDL HIỆN NAY 1. Thực trạng
Hiện nay có rất nhiều cuộc tấn công đánh cắp CSDL vào các tổ chức,
công ty và doanh nghiệp, gây ra các hậu quả nặng nề như lộ thông tin
người dùng, lộ các dữ liệu quan trọng của tổ chức, công ty…phần lớn là
do người phát triển không bảo mật tốn gây ra những lỗ hổng dễ bị khai
thác để tấn công vào CSDL
PHẦN 2: TỔNG QUAN VỀ POSTGRESQL
1. Tổng quan về hệ quản trị cơ sở dữ liệu PostgreSQL
- PostgreSQL là một hệ thống quản trị cơ sở dữ liệu quan hệ-đối
tượng (object-relational database management system) có mục đích
chung, hệ thống cơ sở dữ liệu mã nguồn mở tiên tiến nhất hiện nay.
- PostgreSQL được phát triển dựa trên POSTGRES 4.2 tại phòng
khoa học máy tính Berkeley, Đại học California.
- PostgreSQL được thiết kế để chạy trên các nền tảng tương tự
UNIX. Tuy nhiên, PostgreSQL sau đó cũng được điều chỉnh linh
động để có thể chạy được trên nhiều nền tảng khác nhau như Mac OS X, Solaris và Windows.
- PostgreSQL là một phần mềm mã nguồn mở miễn phí. Mã nguồn
của phần mềm khả dụng theo license của PostgreSQL, một license
nguồn mở tự do. Theo đó, bạn sẽ được tự do sử dụng, sửa đổi và
phân phối PostgreSQL dưới mọi hình thức.
- PostgreSQL không yêu cầu quá nhiều công tác bảo trì bởi có tính
ổn định cao. Do đó, nếu bạn phát triển các ứng dụng dựa trên
PostgreSQL, chi phí sở hữu sẽ thấp hơn so với các hệ thống quản trị dữ liệu khác.
- PostgreSQL là môt trong các RDBMS nh攃⌀ và nhanh nhất thế giới
hiên nay. Nó được sử dụng rất nhiều trong các hê ̣ thống trọng yếu
của các tổ chức, tâp̣ đoàn lớn trên thế giới và cả Viêt Nam.
2. Ưu điểm và nhược điểm của hệ quản trị cơ sở dữ liệu PostgreSQL a. Ưu điểm:
● Mã nguồn PostgreSQL có sẵn miễn phí theo giấy phép
nguồn mở. Điều này cho phép bạn tự do sử dụng, sửa đổi và
triển khai nó theo nhu cầu kinh doanh của bạn
● Miễn phí, tiên tiến nhất hiện nay 4
● Có tính ổn định cao, hạn chế việc bảo trì hệ thống
● Hỗ trợ nhiều ngôn ngữ
● Cộng đồng sử dụng lớn
● Hỗ trợ nhiều hệ điều hành
● Dễ cài đặt và sử dụng
● Tương thích với các nền tảng khác nhau sử dụng tất cả các
ngôn ngữ chính và phần mềm trung gian
● Ghi nhật ký viết trước của PostgreSQL làm cho nó trở thành
một cơ sở dữ liệu có khả năng chịu lỗi cao
● Nó cung cấp một cơ chế khóa tinh vi nhất.
● Hỗ trợ kiểm soát đồng thời nhiều phiên bản.
● Mature Server-Side Lập trình chức năng
● Tuân thủ tiêu chuẩn SQL ANSI
● Hỗ trợ đầy đủ cho kiến trúc mạng client – server
● SSL sao chép dựa trên đăng nhập và kích hoạt
● Máy chủ dự phòng và tính sẵn sàng cao (high availability)
● Tương thích hướng đối tượng và tương thích ANSI-SQL 2008
● Hỗ trợ cho JSON cho phép liên kết với các kho lưu trữ dữ
liệu khác như NoQuery, hoạt động như một trung tâm liên
kết cho cơ sở dữ liệu polyglot. b. Nhược điểm:
● Postgres không thuộc sở hữu của một tổ chức. Vì vậy, nó đã
gặp khó khăn khi đưa tên của mình ra khỏi đó mặc dù có đầy
đủ tính năng và có thể so sánh với các hệ thống DBMS khác
● Những thay đổi được thực hiện để cải thiện tốc độ đòi hỏi
nhiều công việc hơn MySQL vì PostgreSQL tập trung vào khả năng tương thích.
● Nhiều ứng dụng nguồn mở hỗ trợ MySQL, nhưng có thể không hỗ trợ PostgreSQL
● Về số liệu hiệu suất, nó chậm hơn MySQL. 5
PHẦN 3: BẢO MẬT TRONG HỆ QUẢN TRỊ CSDL POSTGRESQL
1. Bảo mật của PostgreSQL
- Xác thực: GSSAPI, SSPI, LDAP, SCRAM-SHA-256, Certificate và các hình thức khác
- Hệ thống kiểm soát truy cập mạnh mẽ
- Bảo mật cấp độ cột và hàng
- Truy cập vào PostgreSQL được quản lý theo cơ chế host-based
access rules. Cơ chế authenticate user cũng rất linh hoạt, có thể dễ
dàng tích hợp với các bên thứ 3
- Ngoài ra, PostgreSQL còn có nhiều tính năng để tăng cường bảo
mật, có khả năng mở rộng dễ dàng. Ví dụ Transparent Data Encryption TDE, Data Masking
2. Các kỹ thuật tấn công PostgreSQL a. SQL Injection
● Là kỹ thuật kẻ tấn công lợi dụng lỗ hổng của việc kiểm tra
dữ liệu đầu vào ( Login Form, Search Input . .) để thêm vào
những ký tự đặc biệt và các câu lệnh SQL độc hại ,tương tác
trực tiếp với hệ thống cơ sở dữ liệu của ứng dụng , lấy những thông tin trái phép .
● Tổ chức OWASP đánh giá và xếp hạng SQL
injection( Injection) đứng đầu về các lỗ hổng web vì độ phổ
thông và mức độ ảnh hưởng cao của nó.( 2017-2021)
● Một số phương thức tấn công SQL Injection
○ In-band SQLi. Error-based SQLi. Union-based SQLi.
○ Inferential SQLi (Blind SQLi)
○ Blind-boolean-based SQLi. Time-based-blind SQLi. ○ Out-of-band SQLi.
b. Leo thang đặc quyền ● Theo chiều ngang:
○ Chiếm quyền của người khác ● Theo chiều dọc
○ Chiếm quyền của người dùng quyền cao hơn (admin) c. Buffer Overflow
● Buffer (bộ đệm dữ liệu) là vùng lưu trữ dữ liệu tạm thời
trong khi chờ để được chuyển đến vị trí khác. Buffer
Overflow (hay Buffer Overrun) sẽ xảy ra khi khối lượng dữ
liệu vượt quá khả năng lưu trữ của buffer. Do đó, khi chương 6
trình cố gắng ghi dữ liệu vào trong buffer, nó sẽ ghi đè lên
các bộ nhớ liền kề khác
● Các kỹ thuật tấn công Buffer Overflow ○ Stack Overflow Attack ○ Heap Overflow Attack ○ Integer Overflow Attack ○ Unicode Overflow
3. Một vài CVE của PostgreSQL
● CVE-2021-32029: Memory disclosure in partitioned-table UPDATE . . RETURNING
● CVE-2021-32028: Memory disclosure in INSERT . . ON CONFLICT . . DO UPDATE
● CVE-2021-32027: Buffer overrun from integer overflow in array subscripting calculations
● CVE-2021-23222: Libpq processes unencrypted bytes from man- in-the-middle
● CVE-2021-23214: Server processes unencrypted bytes from man- in-the-middle
● CVE-2021-20229: Single-column SELECT privilege enables reading all columns
● CVE-2021-3677: Memory disclosure in certain queries
● CVE-2021-3393: psql's \gset allows overwriting specially treated variables
● CVE-2020-25695: Multiple features escape "security restricted operation" sandbox
● CVE-2020-25694: Reconnection can downgrade connection security settings
● CVE-2020-14350: Uncontrolled search path element in CREATE EXTENSION
● CVE-2020-14349: Windows installer runs executables from uncontrolled directories
● CVE-2020-1720: ALTER . . DEPENDS ON EXTENSION is missing authorization checks.
● CVE-2019-10211: Windows installer bundled OpenSSL executes
code from unprotected directory 7
PHẦN 4: PHÂN TÍCH THỰC NGHIỆM 1. Xây dựng
- Xây dựng một trang web bằng PHP với các chức năng học sinh có thể đăng
nhập để xem điểm, giáo viên có thể đăng nhập để thêm, xóa, chỉnh sửa điểm của học sinh
- Một hệ quản trị cơ sở dữ liệu Postgresql với 2 bảng
Bảng user chứa thông tin đăng nhập của học sinh và giáo viên
Bảng score lưu trữ thông tin về điểm của các học sinh
- Thông tin và dữ liệu của các bảng như sau: 2. Xâm nhập
* Note: Công cụ sử dụng là Postman
- Postman là một Nền tảng API dành cho các nhà phát triển để thiết kế, xây
dựng, thử nghiệm và lặp lại các API.
- Dowload: https://dl.pstmn.io/download/latest/win64 8
2.1. Kịch bản 1: Cố gắng xâm nhập vào hệ thống qua thanh url bằng cách
tiêm vào đó những câu sql injection
• Có một số cách để kiểm tra xem liệu website có đang bị lỗ hổng không
đó là dùng một câu query luôn đúng
• Trong trường hợp này chúng ta sử dụng format một câu query phổ biến đó là:
SELECT * FROM tables WHERE field = 'value' or 2 = 2
• Câu query trên sẽ luôn trả về tất cả dữ liệu có trong bảng table cho dù dữ liệu đầu vào là gì:
- Khi truy cập thanh url bình thường: 9 - Sau khi tiêm SQL Injection:
- urls: http://localhost:3000/users/detail/?id=2 or 2 =2
2.2. Kịch bản 2: Sau khi đã xác định được website có lỗ hổng sql injection
tiếp tục thực hiện truy vấn và phá hỏng CSDL của website
* Note: Ở đây ta đã xác định là Website đang bị injection ở một đầu
api nên ta sẽ thực hiện tấn công liên tục vào nó
2.2.1. Thực hiện SHOW database name and tất cả các table có trong database
- urls: http://localhost:3000/users/detail/?id=2 or 2 =2 ;SELECT
CURRENT_DATABASE(); SELECT table_name FROM information_schema.tables
WHERE table_schema='public' -- 10
- Từ cách tấn công trên ta có thể khẳng định là Website có thể công bằng cách
tiêm nhiều câu SQL Injection
- Kết quả trả về cho ta biết được ở thời điểm tấn công database mà website sử
dụng có tên là injection-postgres và có 2 table là users và score
2.2.2. Thực hiện kiểm tra role trong bảng “users” vào table “users” vừa trả ra
kết quả* Note: Ta thấy thông tin user trả về có một field là role, thường đây
sẽ là quyền để truy cập vào một số thông tin nhất định nên kẻ tấn
công sẽ cố gắng để có quyền cao nhất ở những role có tên dạng như vậy
- urls: http://localhost:3000/users/detail/?id=2 or 2 =2 ;SELECT DISTINCT role FROM users 11
- Bây giờ ta đã biết được các role có trong bảng users là “giangvien” và “hocsinh”
- Với kết quả như vậy thì có thể khẳng định role “giangvien” là role cao nhất
2.2.3. Thực hiện INSERT vào table “users” với role là “giangvien”
- Ở đây, API không bị error 500, có nghĩa là câu SQL Injection đã thành công
- Và trong bây giờ mở database lên sẽ thấy có một bản ghi mới được tạo: 12
- Việc khai thác dữ liệu thế nào sau đó sẽ do bên tấn công thực hiện với mục đích khác nhau
2.2.4. Thực hiện UPDATE một user từ role “hocsinh” thành “giangvien” trong
table “”* Note: Ở đây giả sử kẻ tấn công có thông tin một user có role là “hocsinh”
- urls: http://localhost:3000/users/detail/?id=2 or 2 =2; UPDATE users SET role =
'giangvien' where username = 'datkma'
- Kiểm tra trong database: username là “datkma” đã chuyển role từ “hocsinh” thành “giangvien” 13
2.2.5. Thực hiện UPDATE vào table “score” với mục đích thay đổi thông tin của user mong muốn
* Note: Giả sử ở đây, kẻ tấn công muốn update điểm của chính mình.
Nên do đó kẻ tấn công đã có thông tin điểm của mình
- B1: Kiểm tra xem bảng score có những cột nào:
- urls: http://localhost:3000/users/detail/?id=2 ; SELECT column_name, data_type
FROM information_schema.columns WHERE table_name = 'score' --
- B2: Thực hiện update “avg”: * Điểm ban đầu: 14 - Thực hiện tấn công
- urls: http://localhost:3000/users/detail/?id=2 ; UPDATE score SET avg= 9.9 where code= 'AT170539' - Kiểm tra trong database:
2.2.6. Ngoài ra với mục đích xấu, kẻ tấn công có thể xóa hết database của Website: 15
- urls: http://localhost:3000/users/detail/?id=2 or 2 = 2; UPDATE score SET avg=
9.9 where code= 'AT170539'
- Kiểm tra trong database, bây giờ toàn bộ dữ liệu đã bị mất: 3. Kết quả
• Ta đã khai thác thành công lỗ hổng SQL Injection có thể xem, sửa
điểm của toàn bộ học sinh
• Ta có thể làm bất cứ điều gì với cơ sở dữ liệu với các câu lệnh SQL
như: INSERT, DELETE, UPDATE, DROP,. .
• Điều đó đặc biệt nguy hiểm khi cơ sở dữ liệu rơi vào tay những người có mục đích xấu 4. Phòng tránh
• Lọc dữ liệu từ người dùng:
• Lọc các ký tự đặc biệt và các từ khóa( UNION SELECT. .) 16
• Không cộng chuỗi để tạo SQL
• Sử dụng parameter thay vì cộng chuỗi
• Không hiển thị tin nhắn báo lỗi:
• Kẻ tấn công có thể dựa vào lỗi để kiểm tra cấu trúc của DB
• Các dữ liệu nhạy cảm phải được mã hoá
• Backup dữ liệu thường xuyên:
• Nếu có bị xóa , chỉnh sửa hay mất dữ liệu thì vẫn có 1 bản sao được giữ lại 17 TÀI LIỆU THAM KHẢO Tiếng Việt
[1] Lê Đình Duy, Bảo vệ ứng dụng web chống tấn công kiểu Sql Injection, kỷ
yếu hội thảo CNTT – 2004, ĐHKHTN TP.HCM.
[2] Nguyễn Duy Thăng, Nguyễn Minh Thu, Nghiên cứu một số vấn đề về bảo
mật , CNTT - 2003 , DHKHTN TP.HCM.
[3] Trần Quang Trung, Chống tấn công SQL Injection sử dụng các khuôn mẫu
tổng quát, An toàn thông tin – 2019, Đại học Quốc Gia Hà Nội.
[4] Phạm Thanh Cường, SQL Injection Tấn công và cách phòng tránh, Các hệ
thống thông tin – 2010, Đại học Quốc Gia Hà Nội - Trường đại học công nghệ. Tiếng nước ngoài
[5] Justin Clarke, SQL Injection Attacks and Defense, Syngress, 2009.
[6] http:/ www.owasp.org/index.php/SQL_Injection
[7] http://www.sqlsecurity.com/FAQs/SQLInjectioAFAQ/tabid/56/Default.aspx
[8]http://www.sensepost.com/labs/papers/sql_insertion/
SQLinsertion2002_whitepaper.pdf [9]
http://www.3c.com.vn/Story/vn/traodoikinhnghiem/leganninhmang/2007/11/30 391.html
[10] http://tusach.thuvienkhoahoc.com/wiki/CROSS-SITE_SCRIPTING
[11] http://congdongit.org/security/1016-phong-ngua-tan-cong-tu-chol- dichvu.html
[12] https:/ www.ptsecurity.com/ww-en/
[13] https:/ viblo.asia/p/sql-injection-va-cach-phong-chong-OeVKB410lkW
[14] Security Information in PostgreSQL:
https:/ www.postgresql.org/support/security/
[15] Documentation in PostgreSQL: https:/ www.postgresql.org/docs/
[16] SQL Injection: https://portswigger.net/web-security/sql-injection 18
[17] Privilege Escalation: https://portswigger.net/web-security/access-control 19
Document Outline
- LỜI NÓI ĐẦU
- 1.Thực trạng
- PHẦN 2: TỔNG QUAN VỀ POSTGRESQL
- a.Ưu điểm:
- b.Nhược điểm:
- PHẦN 3: BẢO MẬT TRONG HỆ QUẢN TRỊ CSDL POSTGRESQL
- 1.Bảo mật của PostgreSQL
- 2.Các kỹ thuật tấn công PostgreSQL
- b.Leo thang đặc quyền
- c.Buffer Overflow
- 3.Một vài CVE của PostgreSQL
- PHẦN 4: PHÂN TÍCH THỰC NGHIỆM
- 1.Xây dựng
- 2.Xâm nhập
- 3.Kết quả
- 4.Phòng tránh
- Tiếng Việt
- Tiếng nước ngoài