Khi làm ứng dụng, đặc biệt các ứng dụng sử dụng các thư viện Open source, phải làm sao để biết các thư viện đó đủ an toàn để sử dụng? Các thư viện đó đã vá các lỗi bảo mật nghiêm trọng hay chưa?

Để trả lời câu hỏi này, mình giới thiệu các bạn một công cụ (tool) mà dự án mình đã sử dụng để quét hàng trăm repository của sản phẩm, phát hiện kịp thời những lỗi bảo mật nghiêm trọng trong sản phẩm. Tool mình muốn giới thiệu chính là Snyk.

Tại sao là Snyk?

  • Snyk hỗ trợ việc quét bảo mật ở hầu hết các ngôn ngữ như: Java, .Net, Javascripts, Python,…
  • Snyk tích hợp dễ dàng với các Source control như GitHub, GitLab, Bitbucket hay Container registries như ECR, GCR, Docker Hub,…
  • Snyk dễ dàng tích hợp với quy trình CI như Jenkins, Circle CI,…
  • Snyk hỗ trợ UI thông báo các lỗi bảo mật cũng như quản lý các projects khá thân thiện;
  • Snyk hỗ trợ bạn tạo các Pull Request, Jira ticket cho các lỗi đã report một cách dễ dàng;
  • Snyk hỗ trợ bạn tự quét và gửi thông báo khi có các báo cáo lỗi bảo mật mới.
  • Và nhiều tính năng khác, bạn có thể yêu cầu bản DEMO để trải nghiệm từ website: https://snyk.io/.

Snyk là free?

Yes, Snyk là free, bạn được hỗ trợ gần như hầu hết tính năng đã liệt kê ở trên với free plan. Nếu bạn muốn có nhiều tính năng hơn, bạn có thể cân nhắc qua phiên bản trả phí. Bạn có thể xem thêm các plan ở link: https://snyk.io/plans/#tabpanel-1.

Snyk CLI

Snyk có hỗ trợ cho bạn để scan các repository ở phía local thông qua bộ Synk CLI, việc sử dụng CLI của Snyk khá đơn giản, bạn cùng xem các bước sau:

1. Install

Bạn cần install Snyk CLI ở local để tiếp tục:

Chú ý: bạn cần có môi trường Node.js để thực hiện lệnh npm, bạn có thể download bản cài đặt từ trang chính https://nodejs.org/en/download/.

2. Đăng nhập

Snyk luôn yêu cầu bạn đăng nhập vào hệ thống trước. Bạn có thể đăng nhập với tài khoản miễn phí hay trả phí, thực hiện lệnh như sau:

Sau lệnh này, Snyk sẽ mở trình duyệt mặc định của hệ thông bạn đang sử dụng để thực hiện đăng nhập, bạn đăng nhập bình thường như thực hiện với https://snyk.io/.

Sau khi đăng nhập thành công, bạn sẽ nhận được thông báo như sau:

3. Test/Scan

Sau khi đã đăng nhập vào Snyk, bạn đã có thể quét các lỗi bảo mật của các thư viện mà ứng dụng đang sử dụng. Bạn di chuyển vào thư mục muốn scan và thực hiện lệnh test:

Chú ý: Khi thực hiện lệnh test, Snyk sẽ không đi tải các thư viện mà bạn đã cấu hình cho dự án, Snyk chỉ dựa vào các thông tin đang có ở môi trường bạn thực hiện lệnh này nên để bảo đảm Synk thấy được bản cuối cùng của thư viện bạn cấu hình cho dự án, bạn nên thực hiện install, build,… trước khi thực hiện lệnh test.

Sau khi test xong bạn có kết quả như sau:

Cách đọc report của Snyk

1. Mức độ nghiêm trọng của lỗi?

Độ nghiêm trọng của lỗi bảo mật được thể hiện qua các từ khóa [High Severity], [Mideum Severity] và [Low Severity]. Với các lỗi được Snyk thông báo với [High Severity], bạn nên có kế hoạch để vá lỗi các sớm càng tốt.

2. Đó là những lỗi nào?

Nhìn vào báo cáo lỗi nhưng bạn không biết đó là lỗi gì, nghiêm trọng như thế nào, bạn có thể vào link mà Snyk cung cấp trong báo cáo để xem chi tiết hơn.

Ví dụ:

Bạn sẽ có chi tiết về lỗi này ở https://snyk.io/vuln/SNYK-JS-UAPARSERJS-610226.

3. Làm sao để vá lỗi?

Bạn đã có thông tin chi tiết trong báo cáo của Snyk về các thư viện cũng như liên kết của nó:

Bạn nhìn vào dòng thông báo thứ 2:

Nghĩa là ứng dụng bạn đang sử dụng thư viện React phiên bản 15.4.2, phiên bản này có sử dụng thư viện fbjs phiên bản 0.8.17 và phiên bản fbjs này đang sử dụng thư viện [email protected] .20, đây chính là phiên bản có lỗi bảo mật Snyk đang báo cáo.

Bạn nhìn dòng báo cáo tiếp theo:

Snyk muốn nói cho bạn biết, lỗi bảo mật này đã được vá ở phiên bản 0.7.22 của thư viện ua-parser-js.

Vậy làm sao để fix lỗi? Tất nhiên không phải thực hiện vá lỗi cho các thư viện đã nói ở trên, điều bạn cần làm là nâng cấp các thư viện đó lên những phiên bản cao hơn, phiên bản đã vá các lỗi đang báo cáo bởi Snyk.

Cũng trong dòng thông báo thứ 2, bạn đừng quên thông báo:

Đây là thông báo không một ai mong muốn nhìn thấy vì nó có nghĩa là bạn đang gặp vấn đề này ở 177 thư viện khác mà ứng dụng đang sử dụng, đây là con số rất lớn, tốn rất nhiều công sực để vá lỗi cũng như test lại sản phẩm sau khi vá xong.

Monitor

Scan kết quả ở local chỉ giúp bạn thấy được chi tiết ở môi trường phát triển. Để đưa dự án vào hệ thống của Snyk và để Snyk tự động scan giúp bạn khi có lỗi bảo mật mới cũng như để chia sẻ báo cáo của bạn với người khác, bạn có thể thực hiện lệnh sau:

UI Report của Snyk

Sau khi bạn gửi kết quả quét lỗi bảo mật của dự án lên Snyk, mọi người trong dự án có thể thấy được với UI khá thân thiện:

Ở phiên bản miễn phí, bạn sẽ bị giới hạn một số chức năng cũng như số lượng được phép thực hiện. Để có nhiều chức năng hơn như chức năng Reports trong hình dưới, bạn phải sử dụng phiên bản trả phí.

Lời kết

Trong thời đại mà mọi ứng dụng đều được ưu tiên đưa lên đám mây như hiện nay, vấn đề bảo mật luôn là vấn đề quan trọng bậc nhất cần quan tâm để đảm bảo sản phẩm an toàn đối với người sử dụng.

Hy vọng với bài viết này, bạn sẽ có thêm một công cụ trợ giúp trong quá trình phát triển sản phẩm, phát hiện kịp thời các lỗi bảo mật của sản phẩm, tạo ra các sản phẩm an toàn hơn và tốt hơn.

Trần Hữu Lập – FPT Software

Tin liên quan: