Giới thiệu Brakeman, một công cụ đánh giá độ bảo mật của ứng dụng Ruby on Rails

1. Giới thiệu chung

Brakeman là một công cụ đánh giá độ bảo mật của ứng dụng rails dựa trên mã nguồn tĩnh. Brakeman tìm ra những lỗ hổng bảo mật mà không cần thiết lập chạy thử toàn bộ ứng dụng.

Công cụ này kiểm tra được các phiên bản 2.x Rails trở lên.

Có plugin cho công cụ test CI Jenkins/Hudson

Phiên bản mới nhất của Brakeman là 3.0.2[1].

Tham khảo mã nguồn tại đây

2. Vì sao phải đánh giá độ bảo mật

Khi một ứng dụng được chính thức đi vào hoạt động (chạy trên môi trường production) thì việc để cho những kẻ xấu tấn công vào ứng dụng qua các lỗ hổng bảo mật sẽ khiến cho ứng dụng đó trở nên vô dụng.

Phát hiện ra những lỗ hổng bảo mật sẽ giúp cho chúng ta, những nhà phát triển ứng dụng, tìm ra các biện pháp ngăn chặn trước khi nó trở thành cơn ác mộng trên môi trường production.

3. Điểm mạnh[2]

  • Không cần tùy chỉnh:" Zero configuration" là một ưu điểm nổi bật của Brakeman. Bạn chỉ cần cài đặt và chạy. Để cài đặt bạn thêm
group :development do
        gem 'brakeman', :require => false
end

Sau đó bundle để cài đặt.

  • Có thể chạy bất cứ khi nào: Bởi vì thứ Brakeman cần từ ứng dụng của bạn không phải thứ gì khác ngoài mã nguồn, cho nên bạn có thể chạy Brakeman ở bất kỳ giai đoạn của việc phát triển. Bạn có thể tạo một ứng dụng rails mới và có thể kiểm tra ngay lập tức bằng Brakeman.

  • Độ bao quát rộng hơn: Brakeman không dựa vào web crawlers (những con bot lùng sục khắp thế giới World Wide Web với mục đích chính là đánh index) để tìm các trang của ứng dụng, công cụ này có thể quét toàn bộ hệ thống. Có nghĩa là bao gồm cả những trang vẫn chưa "live". Theo lý thuyết, Brakeman có thể phát hiện ra những lỗi bảo mật trước khi chúng có thể bị khai thác.

  • Best Practices: Vì được xây dựng riêng cho Ruby on Rails nên Brakeman có thể kiểm tra các config, settings theo best practices một cách dễ dàng.

  • Test linh hoạt: Mỗi test của Brakeman được thực hiện độc lập, vì vậy bạn có thể thực hiện test cho một tập hợp con các test. Để list ra các test mà Brakeman có dùng lệnh:

    brakeman -k
    Available Checks:
    ------------------------------
    CheckBasicAuth                Checks for the use of http_basic_authenticate_with
    CheckCrossSiteScripting       Checks for unescaped output in views
    CheckContentTag               Checks for XSS in calls to content_tag
    CheckCreateWith               Checks for strong params bypass in CVE-2014-3514
    CheckDefaultRoutes            Checks for default routes
    ...
Ví dụ để chạy test cho `CheckContentTag` và `CheckModelAttributes` thì chúng ta chạy lệnh
    brakeman -t CheckContentTag,CheckModelAttributes
Brakeman sẽ xuất ra một report trên terminal. Nếu bạn muốn xuất ra report dưới dạng html thì chạy lệnh:
    brakeman -t CheckContentTag,CheckModelAttributes -o report.html
Report sẽ được lưu vào file `report.html`

_Lưu ý: giữa các options để test chỉ được ngăn cách bằng dấu ','_
    #wrong:
        brakeman -t check1, check2
    #right:
        brakeman -t check1,check2
  • Tốc độ: Có lẽ Brakeman không quá nhanh nhưng cũng nhanh hơn những ứng dụng quét "black-box". Thậm chí những ứng dụng lớn cũng chỉ cần vài phút để kiểm tra.

4. Những hạn chế

  • Lỗi dương tính (false positives): Chỉ có lập trình viên của ứng dụng hiểu rõ những giá trị (values) nào đó có nguy hiểm hay không. Brakeman mặc định là rất hoài nghi, cho nên dẫn đến nhiều lỗi dương tính.

  • Cấu hình khác thường: Cấu hình Brakeman cho rằng bạn đang dùng setup "điển hình" của Rails. Có thể sẽ có một số phần của ứng dụng bị bỏ qua vì chúng không nằm trong bố cục thông thường của Rails.

  • Chỉ biết đến code: Các công cụ kiểm tra lỗ hổng bảo mật động sẽ kiểm tra một website đang chạy (live) và có thể kiểm tra được toàn bộ ứng dụng, bao gồm cả webserver và database. Hiển nhiên rằng Brakeman sẽ không thể biết được webserver hay database có lỗ hổng bảo mật nào không.

  • Không thể biết hết: Brakeman không thể hiểu hết mọi chuyện đang diễn ra ở trong code. Nó sẽ đưa ra những giả thiết hợp lý. Nó có thể bỏ qua một số thứ, nhưng nó đã cố gắng hết sức có thể 😄

5. Cách sử dụng

Lệnh cơ bản:

brakeman -o output_file

output_file có thể lưu thành những định dạng text, html, tabs, json, markdown, và csv.     Có thể xuất ra nhiều định dạng:

brakeman -o report.html -o report.json

Bỏ qua một số test dùng option -x:

brakeman -x CheckResponseSplitting

Để so sánh kết quả với báo cáo cũ sử dụng lệnh:

brakeman --compare old_report.json

6. Reference

[1] presidentbeef. (unkown). BRAKEMAN. Available: https://github.com/presidentbeef/brakeman. Last accessed 20th March 2015.

[2] Brakeman. (unknown). Documentation. Available: http://brakemanscanner.org/docs/introduction. Last accessed 21st March 2015.