TECH TALK THÁNG 10: BẢO MẬT TRONG ỨNG DỤNG WEB

Hiện nay, ứng dụng web ngày càng được cải tiến và sử dụng phổ biến. Tuy nhiên, những tiềm ẩn trong việc bảo mật ứng dụng web đang khiến cho người dùng cá nhân, doanh nghiệp đều thấy khá quan ngại. Để các thành viên nhà Ominext có cơ hội để cùng tìm hiểu và thảo luận, ngày 12/10 vừa qua, buổi Tech Talk với chủ đề “Bảo mật trong ứng dụng web” đã được diễn ra tại phòng Sakura, trụ sở chính của Ominext JSC.

Cùng Ominext tham khảo bài viết dưới đây qua sự chia sẻ của anh Phạm Văn nghiêm qua buổi Tech Talk với các nội dung chính: Các mối đe dọa, biện pháp security trong giai đoạn thiết kế và các phương thức tấn công và biện pháp security trong giai đoạn thực hiện.

Bao-mat-ung-dung-web-01

Các mối đe dọa của bảo mật web đến từ đâu?

rỉ thông tin: “Rò rỉ thông tin” là nguy cơ mà thông tin lưu trữ trên server hay thông tin xử lý bị rò rỉ ra. Thông tin mà user đăng ký có thể bị lộ ra.

Giả tạo thông tin: là một nguy cơ mà thông tin lưu trữ và xử lý trên Web application bị thay đổi. Như thông tin người dùng, dữ liệu,… bị thay đổi khiến cho user không thể sử dụng được hệ thống hoặc tiếp nhận thông tin giả mạo.

Truy cập trái phép Web application: Truy cập trái phép web application là việc vượt qua phạm vi quyền đã được web application cấp để sử dụng web application đó một cách không phù hợp.

Mạo danh: Mạo danh là nguy cơ kẻ tấn công lấy được, hoặc đoán được account và password sử dụng web application 1 cách trái phép, mạo danh người sử dụng chính đáng để sử dụng web application.

Tấn công từ chối dịch vụ DDoS: là nguy cơ mà việc cản trở việc cung cấp dịch vụ của web application do web applivation bị overload hoặc gặp lỗi bằng cách lợi dụng điểm yếu của của web application. Web application có khả năng bị làm chậm hoặc tạm dừng.

Thực thi OS command: là nguy cơ web application bị lợi dụng để thực thi OS command một cách tùy ý. Bằng việc thực thi OS command để cài backdoor, web server có nguy cơ bị thâm nhập vào.

Có những biện pháp security nào khi thiết kế?

Thiết kế bảo mật đối với mỗi chức năng: Khi thiết kế, nếu thiết kế không phù hợp với bảo mật, sẽ ảnh hưởng lớn tới phương pháp thực hiện các chức năng cần thiết của Web application, dẫn đến có khả năng cao là phải làm lại quá trình phát triển. Do đó, chúng ta cần tiến hành thiết kế sau khi đã thảo luận về chức năng của dịch vụ, tính quan trọng, và xem xét bảo mật. Tất cả các chức năng đều phải được yêu cầu bảo mật chung:

  • Nên sử dụng data tối thiểu cần thiết trao đổi với client để vùng bị tấn công là nhỏ nhất.
  • Validate giá trị cả ở client và server. Luôn luôn phải thực hiện validate ở server.
  • Nên hiển thị address bar, status bar ở client browser để user tiến hành đúng việc xác nhận site
  • Không xuất những thông tin không cần thiết như address IP nội bộ, path nội bộ
  • Không mô tả những thông tin không cần thiết như thông tin developer ở comment HTML
  • Nên thống nhất các chức năng validate,để giảm thiểu nguy cơ bị sót hoặc sai sót trong việc validate
  • Nên ghi request vào log để xác nhận và nhận diện sự tấn công.

Yêu cầu bảo mật các chức năng xử thông tin quan trọng: 

  • Thông tin mà có bao gồm ở URL, bởi có khả năng bị rò rỉ ra site ngoài qua Referer header nên thông tin quan trọng thì nên để user sử dụng Post method để gửi.
  • Trường hợp hiển thị thông tin quan trọng thì hãy xuất HTML đã đặt setting không để lại cache trong browser
  • Với các thông tin quan trọng thì cần phải sử dụng SSL
  • Không sử dụng frame để user có thể dễ dàng kiểm tra site
  • Ở màn hình nhập thông tin cá nhân, HTML không được setting để autocomplete
  • Thông tin cá nhân được mã hóa khi lưu trữ bằng thuật toán đáng tin cậy

Yêu cầu security đối với chức năng authenticate:

  • Ở màn hình nhập liệu, trường nhập password sử dụng attribute password
  • Nếu spec không yêu cầu thì không xuất password ra
  • Account và password được gửi đi bằng phương thức POST
  • Khi authenticate fail, không đưa lý do fail vào message để không thể xác nhận được sự tồn tại của user
  • Để xác nhận và nhận diện tấn công, ghi record khi authenticate thành công và thất bại trong log.
  • Có chức năng lock account và đình chỉ tạm thời account tùy thuộc vào authenticate thất bại mấy lần so với quy định.
  • Yếu cầu password phải đủ độ mạnh, phải hash khi lưu. setting ngày hết hạn của password, và cho update định kì.
  • Nếu có màn hình quản lý thì cấp quyền tối thiểu. Cũng cần đầy đủ các security không chủ quan.
  • Cung cấp chức năng logout, khi log out thì xóa session ở phía server.

Yêu cầu security đối với chức năng quản session: 

  • Cấp session ID mới khi 1 session mới được tạo (login thành công là 1 session mới)
  • Session ID sử dụng không phải là giá trị tạo tùy ý ở phía client mà là giá trị tạo ra ở phía server
  • Sử dụng giá trị session ID có nhiều ký tự random và khó đoán
  • Đặt thời gian có hiệu lực của session
  • Sử dụng chức năng quản lý session của framework và API chuyên dụng bản mới nhất
  • Dù cùng user nhưng mỗi lần login thì có session ID khác nhau.

Yêu cầu security đối với chức năng xử Cookie:

  • Nội dung lưu trong cookie là ít nhất trong phạm vi cần thiết
  • Thời gian có hiệu lực của Cookie, path, domain được set ở mức nhỏ nhất trong phạm vi cần thiết
  • Cookie tạo ra được gắn flag HttpOnly

Yêu cầu security đối với chức năng delete, update, register thông tin:

  • Ở chức năng register, update, delete thông tin sau khi authenticate nên cho nhập password hiện tại ở màn hình nhập và màn hình confirm để authenticate lại
  • Ở chức năng register thông tin, để tránh register auto do tool thì nên sử dụng những công cụ như CAPTCHA

Yêu cầu security đối với chức năng remind password:

  • Sử dụng câu hỏi bí mật. Không sử dụng những câu hỏi mà thường có ít sự lựa chọn câu trả lời (ngày tháng năm sinh, thành phố,tỉnh,huyện..)
  • URL trong mail xác nhận chứa string chứa nhiều ký tự random khó đoán, chỉ tiến hành xử lý thay đổi khi authentication string trong URL là chính xác
  • Nên vô hiệu string random authenticate trong mail xác nhận của người đó 1 thời gian nhất định hoặc sau khi hoàn thành update
  • Không thông báo lại password đã quên
  • Bắt người dùng nhập câu hỏi và câu trả lời thay vì cho phép chọn từ bộ có sẵn

Yêu cầu security đối với chức năng chuyển hướng (redirect):

  • Cần có page chuyển hướng. Tất cả các request sang domain bên ngoài cần qua page chuyển hướng để xử lý sau đó mới cho redirect qua. Và chỉ chuyển hướng đến page trong whitelist.
  • Các parameter ở page chuyển hướng cần verify.

Yêu cầu security đối với chức năng quản lý:

  • Chỉ cho phép người quản lý có quyền có thể sử dụng thông qua chức năng authentication và authorization
  • Quản lý truy cập bằng IP, port
  • Nên sử dụng 1 domain riêng, vùng truy cập riêng cho chức năng quản lý.

Các phương thức tân công và biện pháp security

Bao-mat-ung-dung-web-02

“SQL Injection” xảy ra là việc câu truy vấn SQL bị sửa đổi để tấn công vào database.

  • Không cho chỉnh sửa câu truy vấn SQL ở client
  • Escape kí tự được biệt của SQL
  • Validate parameter đúng kiểu dữ liệu trước khi đưa vào câu truy vấn

Cross site scripting (XSS): CrossSite Scripting là việc có thể chèn những script từ ngoài vào nhũng ứng dụng web.

  • Xử lí escape các kí tự đặc biệt
  • Cấm import các stylesheet từ trang khác
  • Sử dụng thống nhất ” (hoặc ‘) để bao tất cả các thuộc tính giá trị của tag.
  • Qui định rõ ràng mã kí tự khi output HTTP response (do tính năng tự động chọn encode cho kí tự của web browser)

Crosssite request forgery (CSRF):

CSRF – Cross Site Request Forgery – là vấn đề khi web application quản lý session bằng cách lưu session ID vào cookie, attacker sẽ tạo sẵn 1 request và user sẽ gửirequest này đi, dẫn đến các xử lý ngoài dự tính bị thực hiện.

  •  Sử dụng one-time parameter xác nhận chuyển màn hình
  •  Kiểm tra lại nguồn link của Referer
  •  Re-authentication bằng password

Directory Traversal: 

  • Directory traversal là vấn đề mà user có thể tùy ý truy cập vào file, directory của OS vượt quá phạm vi đã dự định trong trường hợp mà Web application có chứa xử lý file, directory của OS. Bằng việc sử dụng chuỗi [../] để chỉ định parent directory, có thể dẫn đến việc truy cập vào các file, directory ngoài dự tính.
  • Không cho phép đưa giá trị user nhập trực tiếp vào path name.
  • Chặn nhập ký tự sử dụng trong path.

Giả tạo parameter:

  • “Parameter tampering” – Giả tạo parameter – là vấn đề mà web application bị sử dụng trái phép bằng cách điều chỉnh các parameter vốn không được phép chỉnh sửa tùy ý phía client side, ví dụ như quyền hay số lượng tiền tệ.
  • Lưu giá trị ở phía server với tất cả param, constant không yêu cầu thay đổi từ phía user.

Directory listing:

Bao-mat-ung-dung-web-03

Directory listing (Liệt kê thư mục) là vấn đề khi truy cập vào URL là một thư mục, do chức năng của web server mà danh sách các thư mục, các file ở trong thư mục đó sẽ bị hiển thị.

  • Vô hiệu hóa liệt kê thư mục
  • Tạo file welcome page, đặt file này vào trong mỗi thư mục.

Vị trí file, directory không phù hợp: 

  • Vị trí file, directory không phù hợp là trường hợp các file cài đặt và backup file được đặt ở thư mục web công khai, khi truy cập trực tiếp vào thì sẽ có thể các file ở trong thư mục công khai đó bị lấy đi ngoài ý muốn.
  • Không đặt các file mật, file backup, file dữ liệu.. ở thư mục công khai của web.
  • Không đặt file thư viện gọi từ ứng dụng ở thư mục công khai của web.

File upload không phù hợp:

  • File upload không phù hợp xảy ra ở các ứng dụng web cho phép upload file. Các script, ra lệnh hiển thị file chỉ định hoặc xóa một file chỉ định có thể được up lên và thực thi.
  • Chỉ cho phép upload các file có extension được cho phép.
  • Không được phép truy cập vào URL map tới file upload. Hoặc không lưu file được upload vào thư mục được map tới URL có thể truy cập.

Error handling không phù hợp:

  • Error handling không phù hợp là việc phát sinh rò rỉ thông tin không mong muốn ở màn hình hiển thị error khi được hiển thị trong ứng dụng web.
  • Vô hiệu hóa thông báo error chi tiết.
  • Chỉ đưa ra thông tin tối thiểu về error khi sử dụng chương trình để đưa ra error.
  • Chuẩn bị trước static page báo lỗi, khi gặp ngoại lệ thì hiển thị page đó.

Tấn công từ chối dịch vụ DDoS:

  • Thêm config file .htaccess để ngăn chặn việc refresh page.
  • Giới hạn số kết nối tới website tại một thời điểm
  • Sử dụng dịch vụ: Cloudflare,…
  • Cài đặt firewall trên server
  • Sử dụng phần cứng chuyên dụng

Test  security:

  • Sử dụng các công cụ để test: Netsparker, OpenVas,…
  • Sử dụng các công ty cung cấp dịch vụ check security hệ thống web.

Bài viết được chia sẻ với quan điểm cá nhân của tác giả. Hi vọng, những thông tin trên sẽ là những thông tin hữu ích giúp bạn có được cái nhìn cụ thể hơn về vấn đề bảo mật trong ứng dụng web.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *