Kiểm tra bảo mật AWS và Azure với Prowler: Hướng dẫn thực tế để khắc phục lỗi cấu hình Cloud (Cloud Drift)

Security tutorial - IT technology blog
Security tutorial - IT technology blog

Cuộc gọi lúc 2 giờ sáng về bảo mật Cloud

Mọi chuyện bắt đầu bằng một cuộc gọi hoảng loạn từ một người đồng nghiệp cũ lúc 2 giờ sáng. Startup của họ vừa nhận được hóa đơn AWS cao gấp 10 lần tháng trước. Sau 20 phút tìm kiếm, chúng tôi đã tìm ra lỗ rò rỉ: một S3 bucket bị công khai và một instance EC2 bị chiếm quyền để đào tiền ảo quy mô lớn. Nguyên nhân? Một lập trình viên mới vào nghề (junior) đã mở security group thành ‘0.0.0.0/0’ để debug kết nối và quên đóng lại. Điều này xảy ra thường xuyên hơn mức các đội ngũ dám thừa nhận.

Các nền tảng đám mây như AWS và Azure cung cấp khả năng mở rộng kinh ngạc, nhưng cũng tiềm ẩn nhiều rủi ro. Chúng ta thường coi hạ tầng là ‘thiết lập xong rồi quên’. Thực tế, sai lệch cấu hình (configuration drift) là một mối đe dọa thầm lặng. Hôm nay storage bucket của bạn là riêng tư (private); nhưng ngày mai, một thay đổi nhỏ về policy có thể khiến nó hiển thị công khai trên toàn bộ internet.

Tại sao môi trường Cloud lại rơi vào tình trạng nguy hiểm

Tại sao điều này vẫn tiếp diễn? Phân tích nguyên nhân gốc rễ thường chỉ ra ba thủ phạm: sự phức tạp khổng lồ, ‘Click-ops’, và sự hiểu lầm về mô hình trách nhiệm chung (shared responsibility model). Các bảng điều khiển cloud hiện đại có hàng nghìn nút gạt. Việc chọn nhầm một ô là cực kỳ dễ dàng.

Sai lệch hạ tầng phát triển mạnh khi các đội ngũ thao tác thủ công trên giao diện (Click-ops) thay vì sử dụng Hạ tầng dưới dạng Code (IaC). Nếu không có dấu vết quản lý phiên bản, việc truy vết ai đã thay đổi cái gì trở nên bất khả thi.

Nhiều nhà phát triển cũng mặc định rằng vì họ đang dùng các nhà cung cấp lớn, bảo mật đã được ‘lo liệu’. Nhưng trong khi AWS bảo vệ chính ‘đám mây’, bạn phải chịu trách nhiệm cho mọi thứ ‘trong’ đám mây đó. Nếu bạn để một cơ sở dữ liệu mở toang mà không có mật khẩu, đó là hóa đơn bạn phải trả. Quét tự động không phải là thứ xa xỉ; đó là cách duy nhất để bạn có thể ngủ ngon mỗi đêm.

So sánh các chiến lược kiểm tra: Thủ công vs. Công cụ gốc vs. Mã nguồn mở

Hồi tôi mới bắt đầu kiểm tra các môi trường cloud, tôi đã làm việc đó bằng tay. Tôi giữ một bảng tính với 50 dòng, kiểm tra trạng thái MFA, người dùng IAM và VPC flow logs từng cái một. Mất hai ngày rưỡi cho một tài khoản duy nhất. Nó thật tẻ nhạt, mệt mỏi và đầy rẫy sai sót do con người.

Các công cụ gốc như AWS Security Hub hoặc Microsoft Defender for Cloud rất mạnh mẽ vì chúng được tích hợp sẵn. Tuy nhiên, chi phí có thể tăng vọt khi hạ tầng của bạn phát triển. Chúng cũng có xu hướng gây nhiễu, chôn vùi các cảnh báo quan trọng dưới hàng núi thông báo ưu tiên thấp có thể không áp dụng cho kiến trúc cụ thể của bạn.

Và đây là lúc Prowler xuất hiện. Công cụ dòng lệnh mã nguồn mở này thực hiện đánh giá bảo mật, kiểm tra và phản ứng sự cố trên hơn 300 danh mục kiểm tra riêng biệt. Nó đối soát môi trường của bạn với các tiêu chuẩn CIS (Center for Internet Security) chỉ trong vài phút. Nó nhanh, miễn phí và cung cấp báo cáo ‘Đạt/Không đạt’ (Pass/Fail) trực diện, chỉ rõ chính xác nơi đang ‘bốc cháy’.

Hiệu quả trong hành động: Thực hành với Prowler

Quy trình làm việc hiệu quả nhất là chạy Prowler như một đợt kiểm tra hàng tuần hoặc lý tưởng nhất là một bước trong pipeline CI/CD của bạn. Nhưng trước khi chạy bất kỳ bản quét nào, hãy đảm bảo quyền truy cập của chính bạn đã được khóa chặt. Khi tôi tạo người dùng IAM hoặc Service Principal cần thiết cho các công cụ này, tôi luôn sử dụng mật khẩu có độ hỗn loạn (entropy) cao.

Tôi tin dùng trình tạo mật khẩu tại toolcraft.app/vi/tools/security/password-generator cho các thông tin xác thực phía máy chủ này. Nó chạy hoàn toàn trong trình duyệt của bạn, nghĩa là không có dữ liệu nhạy cảm nào chạm tới mạng. Đó là một bước tốn 5 giây giúp ngăn chặn tấn công brute-force vào chính các tài khoản bạn dùng để giám sát bảo mật.

Cài đặt Prowler

Việc thiết lập rất đơn giản. Vì Prowler dựa trên Python, hãy sử dụng môi trường ảo (virtual environment) để giữ hệ thống của bạn sạch sẽ và tránh xung đột phụ thuộc.

# Tạo và kích hoạt môi trường ảo
python3 -m venv prowler-venv
source prowler-venv/bin/activate

# Cài đặt gói
pip install prowler
prowler -v

Quét hạ tầng AWS

Để quét AWS, Prowler lấy thông tin từ thông tin xác thực AWS CLI hiện có của bạn. Đảm bảo profile của bạn có ít nhất các managed policy SecurityAuditViewOnlyAccess được gán kèm.

# Chạy quét toàn bộ trên profile mặc định
prowler aws

# Kiểm tra một dịch vụ cụ thể, ví dụ như lưu trữ S3
prowler aws --services s3

# Kiểm tra theo khung tuân thủ (ví dụ: CIS Level 1)
prowler aws --compliance cis_1.5_aws_level1

Kết quả đầu ra sẽ làm nổi bật chính xác tài nguyên nào không đạt. Nó có thể gắn cờ một S3 bucket thiếu versioning hoặc một người dùng IAM từ 5 năm trước vẫn chưa bật MFA.

Quét hạ tầng Azure

Khả năng hỗ trợ Azure trong Prowler rất mạnh mẽ. Trước tiên, bạn cần xác thực qua Azure CLI (az login). Prowler sau đó sẽ sử dụng phiên làm việc đó để kiểm tra các subscription của bạn.

# Xác thực với Azure
az login

# Bắt đầu quét
prowler azure

Prowler sẽ phát hiện các sai sót phổ biến, chẳng hạn như ‘Cấp độ truy cập công khai chưa được đặt thành Private cho các blob container’ hoặc các agent giám sát bị vô hiệu hóa. Đây là những lỗ hổng cụ thể mà kẻ tấn công tìm kiếm khi cố gắng xâm nhập vào mạng của bạn.

Báo cáo chỉ là sự khởi đầu

Quét chỉ là 10% của trận chiến. Giá trị thực sự nằm ở việc dọn dẹp đống hỗn độn. Prowler tạo ra một thư mục output với các tệp CSV, JSON và HTML. Tôi thường bắt đầu với báo cáo HTML để có cái nhìn tổng quan (heat map) về các phát hiện có mức độ nghiêm trọng ‘Critical’ và ‘High’.

Đừng cố gắng làm mọi thứ cùng lúc. Hãy tuân theo danh sách ưu tiên này:

  • Định danh là ưu tiên số 1: Vá các lỗ hổng MFA, thu hồi các key cũ hơn 90 ngày và loại bỏ các role thừa quyền.
  • Dữ liệu là ưu tiên số 2: Khóa chặt lưu trữ S3/Blob và mã hóa các cơ sở dữ liệu khi nghỉ (at rest).
  • Mạng là ưu tiên số 3: Đóng các security group ‘0.0.0.0/0’ và thắt chặt tường lửa.

Nếu Prowler gắn cờ một chính sách mật khẩu IAM yếu, hãy tận dụng cơ hội đó để nâng cao tiêu chuẩn. Tôi khuyên dùng tối thiểu 14 ký tự. Bạn có thể sử dụng toolcraft.app/vi/tools/security/password-generator để cho đội ngũ thấy một mật khẩu thực sự ‘mạnh’ trông như thế nào, giúp họ từ bỏ các khuôn mẫu dễ đoán.

Bước cuối cùng: Tự động hóa việc kiểm tra

Khi bạn đã thành thạo các lệnh thủ công, hãy tự động hóa chúng. Một job Cron đơn giản trên một instance Linux đã được bảo mật hoặc một GitHub Action có thể chạy Prowler hàng tuần. Hãy thiết lập để nó tải kết quả JSON lên một bucket riêng tư và được mã hóa.

Điều này tạo ra một hồ sơ lịch sử về tình trạng bảo mật của bạn. Nếu có sự cố xảy ra, bạn sẽ không phải đoán mò; bạn sẽ thấy chính xác thời điểm một cấu hình sai cụ thể được đưa vào. Chuyển từ một đám mây ‘hộp đen’ sang một hạ tầng được kiểm tra đầy đủ cần nỗ lực, nhưng các công cụ như Prowler làm cho hành trình đó trở nên khả thi hơn.

Share: