Hướng dẫn thiết lập log cảnh báo security ứng dụng

I. GIỚI THIỆU

Trong môi trường công nghệ ngày càng phát triển, bảo mật ứng dụng trở thành một trong những yếu tố hàng đầu cần được chú trọng. Việc giám sát và ghi nhận các sự kiện bảo mật thông qua log cảnh báo là phương pháp quan trọng giúp phát hiện kịp thời các mối đe dọa và phản ứng nhanh chóng khi có sự cố xảy ra. Bài viết này sẽ hướng dẫn bạn cách thiết lập log cảnh báo cho ứng dụng của mình, từ việc chọn lựa các công cụ phù hợp đến việc tối ưu hóa quy trình để đảm bảo bạn luôn có cái nhìn tổng quan về tình hình bảo mật của hệ thống. Hãy cùng khám phá cách bảo vệ ứng dụng của bạn một cách hiệu quả hơn!

II. DO

  • Tất cả log nên theo tiêu chuẩn ISO 8601 WITH UTC offset to ensure maximum portability (OWASP)
{
"datetime": "2021-01-01T01:01:01-0700",
"appid": "foobar.netportal_auth",
"event": "AUTHN_login_success:joebob1",
"level": "INFO",
"description": "User joebob1 login successfully",
"useragent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
"source_ip": "165.225.50.94",
"host_ip": "10.12.7.9",
"hostname": "portalauth.foobar.com",
"protocol": "https",
"port": "440",
"request_uri": "/api/v2/auth/",
"request_method": "POST",
"region": "AWS-US-WEST-2",
"geo": "USA"
}
  • Log các sự kiện quan trọng liên quan đến giao dịch tài chính và quyền truy cập hệ thống. (PCI-DSS)
  • Lưu trữ log tối thiểu 1 năm, với 3 tháng đầu phải có sẵn để truy xuất nhanh. (PCI-DSS).
  • Sử dụng các MDC (Mapped Diagnostic Context) hoặc Correlation ID để gắn kết sự kiện liên quan đến người dùng mà không log toàn bộ dữ liệu.
  • Mã hóa log khi truyền qua mạng và khi lưu trữ
  • Bảo vệ log khỏi truy cập và chỉnh sửa trái phép.
  • Lưu trữ log theo chính sách lưu trữ và bảo mật dữ liệu của tổ chức.

III. DON’T

  • Không ghi log dữ liệu nhạy cảm như: mật khẩu, số thẻ tín dụng, thông tin cá nhân (PII) (OWASP)
  • Không log thông tin thẻ thanh toán đầy đủ (chỉ lưu trữ 6 chữ số đầu và 4 chữ số cuối nếu cần). (PCI-DSS)

IV. PLAYBOOK

Đây là một số log/rule alert cần có cho một ứng dụng/hệ thống, dựa theo Application Logging Vocabulary Cheat Sheet, tôi cũng bổ sung thêm vài rule <(”)

Xác thực [AUTHN]

  • authn_login_success[]

Mô tả: Tất cả các sự kiện đăng nhập, bao gồm thành công, cần được ghi nhận.

Mức độ: INFO

Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "authn_login_success:joebob1",
"level": "INFO",
"description": "Người dùng joebob1 đã đăng nhập thành công"
}
  • authn_login_successafterfail[, retries]

Mô tả: Người dùng đăng nhập thành công sau khi trước đó đã gặp lỗi.

Mức độ: INFO

Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "authn_login_successafterfail:joebob1,2",
"level": "INFO",
"description": "Người dùng joebob1 đã đăng nhập thành công sau 2 lần thất bại"
}
  • authn_login_fail[]

Mô tả: Tất cả các lần đăng nhập thất bại cần được ghi nhận.

Mức độ: WARN

Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "authn_login_fail:joebob1",
"level": "WARN",
"description": "Người dùng joebob1 đã đăng nhập thất bại"
}
  • authn_login_fail_max[, maxlimit(int)]

Mô tả: Ghi nhận khi người dùng đạt giới hạn đăng nhập thất bại.

Mức độ: WARN

Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "authn_login_fail_max:joebob1,3",
"level": "WARN",
"description": "Người dùng joebob1 đã đạt giới hạn thất bại đăng nhập là 3"
}
  • authn_login_lock[, reason]

Mô tả: Ghi nhận khi tài khoản bị khóa do vượt quá số lần thử hoặc do điều kiện khác.

Mức độ: WARN

Lý do:

maxretries: Đã vượt quá số lần thử tối đa

suspicious: Phát hiện hoạt động đáng ngờ

customer: Người dùng yêu cầu khóa tài khoản

other: Lý do khác

Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "authn_login_lock:joebob1,maxretries",
"level": "WARN",
"description": "Người dùng joebob1 bị khóa do vượt quá số lần thử"
}
  • authn_password_change[]

Mô tả: Mọi lần đổi mật khẩu phải được ghi nhận, bao gồm thông tin người dùng.

Mức độ: INFO

Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "authn_password_change:joebob1",
"level": "INFO",
"description": "Người dùng joebob1 đã thay đổi mật khẩu thành công"
}
  • authn_password_change_fail[]

Mô tả: Ghi nhận khi nỗ lực đổi mật khẩu thất bại. Có thể dẫn đến các sự kiện khác như khóa tài khoản.

Mức độ: INFO

Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "authn_password_change_fail:joebob1",
"level": "INFO",
"description": "Người dùng joebob1 đã không đổi được mật khẩu"
}
  • authn_impossible_travel[, region1, region2]

Mô tả: Ghi nhận khi người dùng đăng nhập từ hai địa điểm xa nhau bất thường, có thể là dấu hiệu chiếm đoạt tài khoản.

Mức độ: CRITICAL

Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "authn_impossible_travel:joebob1,US-OR,CN-SH",
"level": "CRITICAL",
"description": "Người dùng joebob1 truy cập từ hai thành phố cách xa nhau"
}
  • authn_token_created[, entitlement(s)]

Mô tả: Mọi lần tạo token truy cập cần được ghi nhận.

Mức độ: INFO

Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "aws.foobar.com",
"event": "authn_token_created:app.foobarapi.prod,create,read,update",
"level": "INFO",
"description": "Đã tạo token cho app.foobarapi.prod với quyền create, read, update"
}
  • authn_token_revoked[, tokenid]

Mô tả: Ghi nhận khi một token bị thu hồi.

Mức độ: INFO

Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "aws.foobar.com",
"event": "authn_token_revoked:app.foobarapi.prod,xyz-abc-123-gfk",
"level": "INFO",
"description": "Token ID: xyz-abc-123-gfk đã bị thu hồi cho người dùng app.foobarapi.prod"
}
  • authn_token_reuse[, tokenid]

Mô tả: Ghi nhận khi cố gắng sử dụng lại token đã bị thu hồi.

Mức độ: CRITICAL

Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "aws.foobar.com",
"event": "authn_token_reuse:app.foobarapi.prod,xyz-abc-123-gfk",
"level": "CRITICAL",
"description": "Người dùng app.foobarapi.prod đã cố sử dụng lại token ID: xyz-abc-123-gfk đã bị thu hồi"
}
  • authn_token_delete[]

Mô tả: Ghi nhận khi token bị xóa.

Mức độ: WARN

Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "authn_token_delete:foobarapi",
"level": "WARN",
"description": "Token cho foobarapi đã bị xóa"
}

Ủy quyền [AUTHZ]

  • authz_fail[,resource]

Mô tả: Nỗ lực truy cập vào tài nguyên không được phép.

Cấp độ: NGHIÊM TRỌNG

Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "authz_fail:joebob1,resource",
"level": "CRITICAL",
"description": "Người dùng joebob1 đã cố gắng truy cập tài nguyên không được cấp phép"
}
  • authz_change[,from,to]

Mô tả: Quyền của người dùng hoặc thực thể đã thay đổi.

Cấp độ: CẢNH BÁO

Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "authz_change:joebob1,user,admin",
"level": "WARN",
"description": "Quyền truy cập của joebob1 đã thay đổi từ 'user' sang 'admin'"
}
  • authz_admin[,event]

Mô tả: Hoạt động của người dùng có quyền quản trị cần được ghi lại.
Cấp độ: CẢNH BÁO
Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "authz_admin:joebob1,user_privilege_change",
"level": "WARN",
"description": "Quản trị viên joebob1 đã cập nhật quyền của người dùng foobarapi từ 'user' thành 'admin'"
}
  • Sử dụng quá mức [EXCESS]

excess_rate_limit_exceeded[userid,max]
Mô tả: Vượt quá giới hạn dịch vụ dự kiến.
Cấp độ: CẢNH BÁO
Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "excess_rate_limit_exceeded:app.foobarapi.prod,100000",
"level": "WARN",
"description": "Người dùng app.foobarapi.prod đã vượt quá giới hạn 100000 yêu cầu"
}

Tải tệp [UPLOAD]

  • upload_complete[userid,filename,type]

Mô tả: Quá trình tải tệp đã hoàn tất.
Cấp độ: THÔNG TIN
Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "upload_complete:joebob1,user_generated_content.png,PNG",
"level": "INFO",
"description": "Người dùng joebob1 đã tải lên tệp user_generated_content.png"
}
  • upload_stored[filename,from,to]

Mô tả: Tệp đã được lưu với tên khác để bảo mật.
Cấp độ: THÔNG TIN
Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "upload_stored:user_generated_content.png,kjsdhkrjhwijhsiuhdf000010202002",
"level": "INFO",
"description": "Tệp user_generated_content.png đã được lưu với mã khóa abcdefghijk101010101"
}


Hành vi độc hại [MALICIOUS]

  • malicious_excess_404:[userid|IP,useragent]

Mô tả: Người dùng yêu cầu nhiều tệp không tồn tại, cho thấy có thể là hành vi tấn công dò tìm tệp.
Cấp độ: CẢNH BÁO
Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "malicious_excess404:123.456.789.101,M@l1c10us-Hax0rB0t0-v1",
"level": "WARN",
"description": "Một người dùng tại 123.456.789.101 đã tạo ra nhiều yêu cầu 404"
}

  • malicious_attack_tool:[userid|IP,toolname,useragent]

Mô tả: Phát hiện công cụ tấn công qua user-agent hoặc chữ ký.
Cấp độ: NGHIÊM TRỌNG
Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "malicious_attack_tool:127.0.0.1,nikto,Mozilla/5.00 (Nikto/2.1.6)",
"level": "WARN",
"description": "Phát hiện lưu lượng tấn công sử dụng Nikto từ 127.0.0.1"
}
  • ngok_tool:[userid|IP,toolname,useragent]

Mô tả: Phát hiện công cụ ngok
Cấp độ: NGHIÊM TRỌNG
Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "ngok_tool:127.0.0.1,ngok,Mozilla/5.00 (Nikto/2.1.6)",
"level": "WARN",
"description": "Phát hiện sử dụng ngok từ 127.0.0.1"
}

Quản lý phiên [SESSION]

  • session_created:[userid]

Mô tả: Một phiên làm việc mới đã được tạo.
Cấp độ: THÔNG TIN
Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "session_created:joebob1",
"level": "INFO",
"description": "Người dùng joebob1 đã bắt đầu một phiên mới"
}
  • session_expired:[userid,reason]

Mô tả: Phiên đã hết hạn, lý do có thể là đăng xuất, hết thời gian, hoặc thu hồi.
Cấp độ: THÔNG TIN
Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "session_expired:joebob1,revoked",
"level": "WARN",
"description": "Phiên của joebob1 đã hết hạn do bị thu hồi bởi quản trị viên"
}


Sự kiện hệ thống [SYS]

  • sys_startup:[userid]

Mô tả: Hệ thống khởi động và ghi lại người đã thực hiện.
Cấp độ: CẢNH BÁO
Ví dụ:

{
"datetime": "2019-01-01 00:00:00,000",
"appid": "foobar.netportal_auth",
"event": "sys_startup:joebob1",
"level": "WARN",
"description": "Người dùng joebob1 đã khởi động một phiên bản mới"
}

Tham khảo:

Published by Nhat Truong

Hi

Leave a comment