Tải bản đầy đủ (.pdf) (5 trang)

5 lỗ hổng bảo mật phổ biến nhất trong thiêt kế web

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (312.82 KB, 5 trang )

5 lỗ hổng bảo mật phổ biến nhất có thể phá hỏng dự
án của bạn
Khi tạo ra một dự án như một trang web hay một ứng dụng web bạn phải tuân thủ
một số quy tắc cơ bản để đảm bảo người dùng được bảo vệ. Để ngăn chặn một cuộc
tấn công, bạn cần tập trung vào chất lượng code tạo ra trong giai đoạn lập trình, việc
cấu hình hệ thống trong giai đoạn triển khai. Dưới đây chỉ là 5 trong hàng hàng ngàn
kịch bản tấn công có thể xảy ra do lỗi của người lập trình.
1. SQL Injection
SQL Injection là loại tấn công nổi tiếng nhất. Nó thường được sử dụng để khai thác
lỗ hổng của trang web trên nền tảng PHP hoặc ASP. Các cuộc tấn công bao gồm
việc tiêm mã độc vào những truy vấn SQL trong ứng dụng của bạn thông qua các
giá trị đầu vào của ứng dụng. Nếu thành công sẽ cho phép kẻ tấn công thêm hoặc
xóa nội dung cơ sở dữ liệu, lấy các giá trị trong CSDL như email, mật khẩu hoặc
thông tin cá nhân người dùng trang web. SQL Injection có thể xảy ra nếu một trang
web chấp nhận những truy vấn không đáng tin cậy vào cơ sở dữ liệu hoặc tạo ra
chúng một cách tự động.
Giả sử rằng các biến đăng nhập (bao gồm tên và mật khẩu) được đưa trực tiếp đến
các câu truy vấn SQL thông qua phương thức POST. Một đoạn code sẽ chịu trách
nhiệm xử lý việc đăng nhập của người dùng có thể dễ dàng bị tổn thương:

Nếu một người dùng trang web gửi tới máy chủ giá trị admin– trong mục tên người
dùng, truy vấn SQL sẽ thực hiện như sau

Điều gì đã xảy ra? Kí tự — sẽ được hiểu bởi DBMS như một comment, kết quả dẫn
đến việc hoàn thành thực thi thất bại một phần của truy vấn SQL, phần này vốn dùng
để kiểm soát mật khẩu. Tin tặc sẽ khai thác nó để chiếm quyền quản trị dịch vụ.
Cách ngăn chặn kiểu tấn công SQL Injection: Cách bảo vệ hiểu quả nhất đối với
kiểu tấn công này là lọc dữ liệu mà người dùng cung cấp bằng các
hàm: mysql_real_escape_string(), pg_escape_string()… Dữ liệu số phải được



chuyển đổi bởi settype() or sprintf(), sau đó kiểm tra với s_numeric(), ctype_digit()
nhằm định dạng dữ liệu chính xác.
2. Stored XSS
Trong kiểu tấn công này, một script được viết bởi tin tặc sẽ được đưa vào cơ sở dữ
liệu của hệ thống bị ảnh hưởng. Đối lập với kiểu tấn công SQL Injection, các mã độc
không ảnh hưởng đến cơ sở dữ liệu mà chỉ ảnh hưởng tới người dùng của hệ thống.
Ví dụ như phần bình luận của trang web. Tin tặc có thể khai thác tất cả người dùng
mà người dùng không hề nghi ngờ trang web đã bị lây nhiễm các mã độc javscript
có thể đánh cắp phiên đăng nhập của người dùng.
Ví dụ:

Cách ngăn chặn Stored XSS
Để ngăn chặn Stored XSS cần một bộ lọc thích hợp cho các dữ liệu đầu vào. Phương
pháp tốt nhất là tạo ra một whitelist các kí tự được phép sử dụng trong các mục. Nếu
trang web dễ bị tổn thương trước Stored XSS thì tùy chọn httpOnly cho cookie gửi
đi có thể giúp bảo vệ tốt hơn người dùng khỏi việc mất phiên người dùng. Trong đa
số trình duyệt hiện nay đã có thể ngăn chặn hành vi ăn cắp cookie bằng JavaScript
từ người dùng.
3. Bảng mã Unicode
Sự phát triển của hệ thống kí tự ASCII mã hóa dựa trên các chữ cái tiếng Anh phổ
biến toàn cầu. Theo thời gian, thế giới bắt đầu sử dụng các ngôn ngữ và hệ thống
bảng chữ cái khác. Do 1 byte không thể dùng để lưu trữ kí tự trong tất cả các ngôn
ngữ, một hệ thống mã hóa mới dành cho các ngôn ngữ đa dạng đã được ra mắt. Đó
chính là chuẩn Unicode. Trong hệ thống Unicode, mỗi kí tự được lưu trữ lớn hơn 1
byte. Bảng mã UTF-8 là bảng mã nền tảng Unicode được sử dụng rộng rãi nhất, cho
phép tin tặc có thể chèm một vài kí tự ví dụ “../” theo các cách khác nhau. Bộ giải
mã UTF-8 không kiểm tra tính hợp lệ của kí tự đặc biệt như “/”.
Ví dụ, để nói về các bảng mã, hãy cùng xem những đường link giống nhau được viết
trong hệ thống bảng mã khác nhau:



Trong các hệ thống mã hóa khác nhau, kí tự sẽ được lưu trữ trong các vị trí khác
nhau. Do đó, bộ lọc danh sách đen các kí tự đầu vào sẽ yêu cầu sử dụng tất cả các
bộ kí tự. Cách phòng chống kiểu tấn công này là chuyển đổi tất cả dữ liệu thành một
định dạng thống nhất. Sau đó chúng ta mới có thể kiểm thử chúng hợp lệ hay không
và loại bỏ kí tự không mong muốn.
5. PHP Injection
Ngôn ngữ lập trình có các hàm cho phép thực thi mã bên ngoài. Trong PHP đó
là require(), include(), eval(), and preg_replace cùng với modifier /e sẽ xem nơi lưu
trữ chuỗi kí tự như một PHP code.
Ví dụ, giả sử trang web có một bộ điều khiển đơn giản dựa trên các tập tin là
các biến gửi qua phương thức GET để đưa vào nội dung của một file có trước.

Như chúng ta thấy tập tin được gọi thông qua bởi phương thức GET và được sử dụng
thông qua hàm include(). Đó là một lỗi nguy hiểm có thể bị khai thác bởi tin tặc bằng
nhiều cách khác nhau. Bất kì mã nào cũng có thể được thực thi. Ví dụ:

Đường dẫn đến mã độc được thông qua như một tham số của hàm. Kịch bản này sẽ
được thực thi bởi các máy chủ của tin tặc.
Các ngăn chặn PHP Injection


Cấu hình máy chủ sẽ giúp ích bạn phòng tránh kiểu tấn công này. Các tùy
chọn allow_url_fopen có thể chặn file truy cập từ bên ngoài máy chủ dành cho các
hàm file_get_contents, fopen, include, và require. Các bảo vệ tốt nhất là không cho
phép dữ liệu đầu vào từ người dùng vào các hàm thực thi script. Bộ lọc chuỗi kí tự
đầu vào và tạo ra whitelist các file được phép là điều cần thiết. Ngoài ra còn nhiều
kiểu tấn công tương tự cũng được các tin tặc khai thác như: Local File Include, Php
Object Injection…
5. Account Lockout

Minh họa tốt nhất cho các cuộc tấn công này là câu chuyện về một người dùng trong
một trang web đấu giá lớn nhất thế giới. Người này đưa ra giá rất cao cho một sản
phẩm. 15 phút trước khi phiên đấu giá đóng cửa, một người dùng khác bước vào đấu
giá. Trước khi đấu giá kết thúc, người dùng đầu tiên cố gắng chốt lại quyết định cuối
cùng của mình, ông đã bị đăng xuất khỏi dịch vụ và nhận được thông báo tài khoản
của ông bị khóa trong vòng 30 phút và không được đấu giá thêm.
Tại sao hệ thống lại xử lí như vậy?
Người dùng thứ hai đã có thể thấy được người dùng đầu tiên đăng nhập. Hắn thực
hiện nhiều lần đăng nhập vào tài khoản người dùng thứ nhất với mật khẩu sai. Với
mục đích ngăn chặn các cuộc tấn công brute-force , hệ thống sẽ khóa tài khoản người
dùng sau khi vượt quá lần đăng nhập thất bại. Tin tặc sử dụng Account Lockout có
thể khiến tài khoản người dùng không thể truy cập được nữa.
Cách ngăn chặn Account Lockout: Thay vì khóa tài khoản người dùng sau khi vượt
quá số lần đăng nhập thất bại, bạn nên xem xét việc yêu cầu người dùng gõ mã
Captcha sau mỗi lần đăng nhập tiếp theo. Điều này sẽ bảo vệ các trang web khỏi
kiểu tấn công brute-force mà không từ chối truy cập người dùng. Một giải pháp khác
là chặn địa chỉ IP trong một khoản thời gian nhất định. Nhưng vẫn có thể tin tặc và
người dùng bị tấn công có chung địa chỉ IP. Nó vẫn sẽ khiến người dùng không thể
truy cập vào tài khoản.
Kiểm tra bảo mật
Kiểm tra thủ công trang web của bạn với những lỗ hổng bảo mật là điều cần thiết.
Để tiết kiệm thời gian bạn có thể sử dụng một số công cụ tìm kiếm lỗ hổng tự động.
Chúng ra hãy cùng nói về 3 phương pháp kiểm tra bảo mật:
Black Box Testing
Kiểm thử viên Black box chỉ thực hiện thông tin về các hàm trong một trang web và
không cần biết cấu trung bên trong ứng dụng. Họ sẽ kiểm tra những dữ liệu đầu vào
nào hợp lệ và kết quả đầu ra có chính xác hay không. Acunetix là một ví dụ về phầm
mềm Black Box Testing.



White Box Testing
White Box Testing lại dựa theo quy tắc ngược lại. Kiểm thử viên sẽ toàn quyền truy
cập vào mã nguồn, các lỗ hổng bảo mật sẽ được phát hiện thông qua việc kiểm tra
code. RATS là một ví dụ phần mềm White Box Testing tự động.
Grey Box Testing
Đó là sự kết hợp cả 2 phương pháp nêu trên. Kĩ thuật này đòi hỏi chúng ta tiếp cận
toàn bộ tài liệu tạo ra trong suốt quá trình phát triển ứng dụng nhưng không tiếp cận
vào mã nguồn. Theo phương pháp này, chúng ta có thể điều chỉnh mức độ kiểm tra
biến cụ thể trong Black Box Testing.
Tổng kết
Năm kiểu tấn công được lựa chọn không được đề cập đến chuyên sâu, chỉ là một vài
kịch bản cơ bản được nêu ra. Chắc chắn còn có rất nhiều các cuộc tấn công đe dọa
doanh nghiệp của bạn. Bất kể lập trình viên, quản lí dự án hay các công ty khởi
nghiệp cần nhận thức được tầm quan trọng trong việc bảo vệ ứng dụng của mình.
Không thực hiện các biện pháp bảo mật đầy đủ có thể khiến bạn bị mất uy tín
với khách hàng ngay cả khi đó là dịch vụ tốt nhất.



×