Viblo CTF
+6

Phân tích source code với ShiftLeft NG SAST

Ngày nay, khi mà các vụ tấn công ngày càng nhiều, các vụ rò rỉ dữ liệu mỗi năm mỗi lớn hơn thì việc bảo mật đối với các tổ chức lại càng phải được đề cao. Trong số các mục tiêu mà các hackers nhắm tới, các ứng dụng là nơi rất thường xuyên bị khai thác và tấn công. Đây có thể là nơi mà các hacker có thể khai thác, tấn công cũng đồng thời là cửa ngõ để kẻ tấn công khai thác sâu hơn vào trong hệ thống. Do đó, để tăng tính an toàn là một nhu cầu bức thiết trong xây dựng và phát triển ứng dụng. Trong các phương pháp để tăng tính an toàn cho ứng dụng, không thể không kể tới phân tích tĩnh (Static Code Analysis).

I. Static Code Analysis

1. Khái niệm phân tích tĩnh

Hiểu một cách đơn giản, việc phân tích tĩnh là một quá trình phân tích, đánh giá source code để tìm ra các lỗi và lỗ hổng trong đó mà không cần thực thi source code. Đây là một quá trình nằm trong Code Review process cũng như là White-box testing process. Thông thường, quá trình này được thực hiện với các công cụ phân tích source code, sau đó sẽ được review lại kết quả một cách thủ công để hạn chế các False Positive mà các công cụ trả về.

2. Tại sao cần phân tích tĩnh

Việc phân tích tĩnh mang lại rất nhiều lợi ích trong quá trình phát triển phần mềm cũng như đảm bảo tính an toàn của phần mềm. Mình có thể kể qua một số các ưu điểm như:

  • Tự động hóa quá trình phân tích giúp tiết kiệm thời gian và tài nguyên.
  • Dễ dàng tích hợp, đồng bộ với các tiến trình khác trong quá trình phát triển ứng dụng.
  • Tìm ra các lỗ hổng và lỗi của ứng dụng từ các phase rất sớm của quá trình phát triển
  • Tăng chất lượng code, hạn chế các lỗ hổng có thể có trong ứng dụng.
  • Đối với các nhà phát triển ứng dụng, việc phân tích tĩnh giúp họ hiểu hơn về các lỗ hổng có thể có trong code của mình.
  • ...

3. Hạn chế

Đương nhiên, bất cứ phương pháp nào cũng có các hạn chế riêng của nó, phân tích tĩnh cũng không phải ngoại lệ. Các hạn chế của phương pháp này có thể kể tới như:

  • Phụ thuộc ứng dụng, ngôn ngữ lập trình
  • Rất nhiều các False Positive
  • Cần phải thực hiện thủ công để kiểm tra lại kết quả trả về
  • Cần phải có quyền truy cập tới toàn bộ source code
  • ...

II. ShiftLeft NextGen Static Analysis

Hiện nay, trên thị trường có rất nhiều các công cụ hay giải pháp hỗ trợ việc phân tích tĩnh. Các công cụ và giải pháp này có thể là trả phí hoặc mất phí. Ở bài này mình xin phép giới thiệu về một trong số các công cụ mà mình đã sử dụng trong việc phân tích source code là ShiftLeft Nextgen Static Analysis.

1. ShiftLeft

Trước hết là về công ty ShiftLeft, công ty này có trụ sở tại Santa Clara, California. CEO của ShiftLeft là Manish Gupta. Theo giới thiệu tại trang chủ của shiftleft, ông từng là Chief Product and Strategy Officer của FireEye. Ngoài ra, có thể xem thêm các thông tin về công ty này tại trang mô tả của dự án.

2. NG SAST

a. Giới thiệu về NG SAST

Ở đây mình xin phép dẫn nguyên lại mô tả của dự án

ShiftLeft’s NextGen Static Analysis (NG SAST) was purpose-built to insert security into developer workflows. NG SAST's speed and accuracy enables security automation with every pull request, which provides the right developer with the right vulnerability information at the right time. Hence, vulnerabilities get fixed faster and earlier, which drives down mean-time-to-remediation (MTTR), reduces attack surfaces, and minimizes technical debt accrual. Furthermore, NG SAST goes beyond technical vulnerabilities (e.g., The OWASP Top Ten) to identify cloud-centric vulnerabilities that traditional static analysis tools can't find, such as business logic flaws, data leakage, hard-coded literals, and insider threats.

Theo đó, NG SAST là công cụ được xây dựng nhằm tăng tính bảo mật trong quá trình làm việc của nhà phát triển. Công cụ này sẽ tự động thực hiện quét đối với mỗi pull request mà nhà phát triển cấp quyền nhanh và chính xác nhất có thể.

b. Tính năng

  • Tìm kiếm các lỗ hổng bảo mật phổ biến như Authentication Bypass, Cross-Site Scripting (XSS), ...
  • Tìm kiếm các chức năng nhạy cảm trong bảo mật
  • Tìm kiếm các secret có trong source code
  • Kiểm tra Common Weakness Enumeration (CWE)
  • ...

Có thể xem thêm về các tính năng của công cụ tại đây.

c. Các ngôn ngữ hỗ trợ

ShiftLeft NG SAST hiện tại hỗ trợ các ngôn ngữ:

  • C#
  • Go
  • Java
  • JavaScript/TypeScript
  • Python
  • Scala

c. Cách hoạt động

ShiftLeft NG SAST sử dụng Code Property Graph là phương pháp tiếp cận và phân tích source code.

Mô hình này sử dụng 3 cấu trúc phổ biến trong phân tích source code là Abstract Syntax Trees (AST), Control Flow Graphs (CFG)Program Dependence Graphs (PDG). Họ có cung cấp tài liệu chi tiết về mô hình này tại đây. (Cá nhân mình đã đọc và thấy là nó cụ thể chi tiết nhưng mình hơi ngu để hiểu 😄 😄 ). Ví dụ về việc sử dụng mô hình này có thể xem thêm tại phần mô tả của shiftleft.

d. Demo qua với một ứng dụng

Dưới đây, mình sẽ thực hiện quét thử 1 project với cli cũng như là đồng bộ với github.

d.1 Cli

Đầu tiên, cần tải file thực thi của NG SAST về.

curl https://cdn.shiftleft.io/download/sl >/usr/local/bin/sl && chmod a+rx /usr/local/bin/sl

Sau đó, thực hiện xác thực với phía server.

sl auth  --token "YOUR_ACCESS_TOKEN"

Sau khi đã xác thực, chúng ta có thể sử dụng file sl để có thể phân tích source code. Ở đây mình sử dụng một vuln app với ngôn ngữ python là vulpy. Repo của dự án tại đây. Để phân tích source code này với cli, trước tiên mình clone về máy, sau đó gọi tới file sl.

cd vulpy
sl analyze --python --app vulpy_cli .
d.2 Github

Trước tiên mình fork repo trên về github của mình.

Tạo secret

Sau đó, vào Setting > Secret > New reposity secret. Ở đây, thêm vào access token của shiftleft.

Sau đó, t sẽ tạo 1 work flow tại phần Action. Work flow file cho python có thể như sau:

# This workflow integrates ShiftLeft NG SAST with GitHub
# Visit https://docs.shiftleft.io for help
name: ShiftLeft

on:
  pull_request:
  workflow_dispatch:
  push:
  # We recommend triggering a scan when merging to your default branch as a best practice,
  # especially if you'd like to compare the results of two scans (e.g., a feature branch against the
  # default branch)
    branches:
      - main
      - master

jobs:
  NextGen-Static-Analysis:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/[email protected]
    - name: Download ShiftLeft CLI
      run: |
        curl https://cdn.shiftleft.io/download/sl > ${GITHUB_WORKSPACE}/sl && chmod a+rx ${GITHUB_WORKSPACE}/sl
    - name: NextGen Static Analysis
      run: ${GITHUB_WORKSPACE}/sl analyze --wait --app vulpy --tag branch=${{ github.head_ref }} --python .
      env:
        SHIFTLEFT_ACCESS_TOKEN: ${{ secrets.SHIFTLEFT_ACCESS_TOKEN }}
        SHIFTLEFT_API_TOKEN: ${{ secrets.SHIFTLEFT_API_TOKEN }}
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Sau đó với mỗi pull request, shiftleft sẽ phân tích lại source code của chúng ta.

d.5 Kết quả

Các app được shiftleft phân tích có thể xem kết quả tại trang chủ của shiftleft.

Tại đây sẽ thể hiện ra các ứng dụng của bạn đã được quét với shiftleft. Bấm vào một ứng dụng để có thể xem chi tiết báo cáo.

Ở đây sẽ có báo cáo khá chi tiết về các lỗ hổng, điểm yếu mà shiftleft đã tìm ra. Các lỗ hổng cũng được phân ra hành các nhóm lỗ hổng, theo mức độ nguy hiểm theo từng version của code. Chọn một lỗi cụ thể trong phần Vulnerabilities, các file và dòng code xảy ra lỗi đó sẽ được thể hiện ra chi tiết hơn

Có thể bấm vào dòng lỗi để xem chi tiết đoạn code được báo. Ví dụ ở đây mình thấy báo ở dòng 17 file bad/mod_user.py:

Tiếp đó đoạn code này gọi tới 2 hàm login và create bad/libuser.py cũng được thông báo phía dưới

III. Đánh giá

Nhìn chung, shiftleft là một công cụ phân tích source code khá ổn. Đây chỉ là các đánh giá cá nhân của bản thân mình, mọi người có thể tự mình trải nghiệm và đưa ra nhận xét.

Cách sử dụng

Việc sử dụng shiftleft nhìn chung là khá đơn giản. Việc chúng ta cần làm chỉ cần tải file sl về và thực thi nó. Các thao tác với shiftleft cũng được mô tả rất chi tiết kiểu step-by-step trong document nên ngay cả người không chuyên môn gì cũng có thể thực hiện được.

Tài liệu

Tài liệu của shiftleft được viết khá chi tiết. Từ những thứ trừu tượng đến các chức năng cụ thể đều được mô tả và lấy ví dụ cụ thể, rất dễ tiếp cận.

Báo cáo

Báo cáo của shiftleft khá chi tiết. Các lỗi được phân loại theo từng nhóm và có lịch sử lỗ hổng của từng version của code. Với tài khoản free, tuy link dẫn vào source code hay lỗi nhưng vẫn có chỉ ra dòng nào lỗi và thông báo lỗi khá cụ thể. Mô tả lỗi thì là mô tả chung của loại lỗi đó chứ không phải của lỗi cụ thể xảy ra. Có thể gắn task, comment vào từng lỗi để những người khác có thể thấy và khắc phục.

Hiệu quả

Nhìn chung mình mới sử dụng công cụ này với các source code vừa và nhỏ. Theo đánh giá của cá nhân mình thì tốc độ xử lí của shiftleft ở mức ổn, lượng false positive tương đối thấp, có thể chấp nhận được, các lỗ hổng chỉ ra khá chính xác và cụ thể. Có thể sẽ cần phải test với nhiều source code hơn cũng như số lượng code lớn hơn để có thể đánh giá được cụ thể về hiệu quả của công cụ này.

Giá cả

Hiện tại thì ShiftLeft hỗ trợ 4 loại là Free, Premium trial, Team và Enterprise.

Với người dùng cá nhân, việc sử dụng free đã khá là ổn với các tính năng cần thiết. Có thể liên hệ với team ShiftLeft để nâng cấp lên Primium Trial trong 15 ngày. Với hai gói còn lại mình chưa có cơ hội trải nghiệm nên không có nhận xét gì.

Cân nhắc

Việc thực hiện phân tích source code với shiftleft luôn đẩy kết quả về phía server của shiftleft. Điều này nên được xem xét trước khi sử dụng nó để phân tích source code của bạn. Nếu source code là mã nguồn đóng hoặc chỉ lưu hành nội bộ thì không nên sử dụng để tránh vi phạm các quy tắc bảo mật của công ty, tổ chức.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.