Tạo yêu cầu hỗ trợ
Đăng nhập Đăng ký
Locker support Locker support
Kết quả

No results found.

Trang chủ Locker Secrets Manager Hướng dẫn gỡ bỏ dữ liệu bí mật trong mã nguồn phần mềm
Vietnamese English
Hướng dẫn gỡ bỏ dữ liệu bí mật trong mã nguồn phần mềm

Phiên bản 01


Việc lưu trữ các dữ liệu nhạy cảm ngay trong mã nguồn (secrets hardcoding) là một loại lỗ hổng bảo mật. Thông qua việc vô tình làm lộ mã nguồn, hoặc các tấn công đọc file ở máy chủ, những secrets này có thể bị kẻ tấn công thu thập, và từ đó giành quyền truy cập trái phép vào những hệ thống có liên quan.

Vì vậy, cần tuyệt đối tránh hình thức lưu trữ không an toàn này trong quá trình phát triển phần mềm. Dưới đây là cách phát hiện và gỡ bỏ các secrets trong mã nguồn dự án của bạn một cách an toàn với phần mềm Locker Secrets Manager.

Cài đặt Locker CLI

Với Windows

Start-Process powershell -Verb runAs
New-Item -Path "$HOME\.locker" -ItemType Directory -Force
Invoke-WebRequest -Uri "https://locker.io/secrets/download/cli-windows " -OutFile "$HOME\.locker\locker.exe"
$oldPath = [System.Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine)
$newPath = "$oldPath;$HOME\.locker"
[System.Environment]::SetEnvironmentVariable("Path", $newPath, [System.EnvironmentVariableTarget]::Machine)

Với Linux

mkdir -p ~/.locker
wget https://locker.io/secrets/download/cli-linux -O ~/.locker/locker
chmod +x ~/.locker/locker
sudo ln -sf ~/.locker/locker /usr/local/bin/locker

Với macOS

arm

mkdir -p ~/.locker
wget https://locker.io/secrets/download/cli-mac-arm64 -O ~/.locker/locker
chmod +x ~/.locker/locker
sudo ln -sf ~/.locker/locker /usr/local/bin/locker

x64

mkdir -p ~/.locker
wget https://locker.io/secrets/download/cli-mac-x64 -O ~/.locker/locker
chmod +x ~/.locker/locker
sudo ln -sf ~/.locker/locker /usr/local/bin/locker

Phát hiện Secrets trong dự án

Sử dụng lệnh scan như sau

locker scan --source <path-to-source-code>

Chúng ta sẽ thu được kết quả như hình dưới, bao gồm:

  • Đường dẫn đến tệp tin chứa secrets
  • Giá trị secret tìm thấy
  • Thứ tự dòng chứa secret
  • Loại secret
  • Mã commit
Notion image

Thay đổi cách lưu Secrets an toàn

Với các phát hiện sau khi scan ra, chúng ta sẽ cần thay đổi cách lưu chúng an toàn hơn thay vì hardcoding.

Khởi tạo dự án tại Locker Secrets

  • Tạo một tài khoản Locker Secrets tại đây nếu bạn chưa có tài khoản
  • Tạo mới project, tương ứng với dự án chứa secrets của bạn
  • Tạo Access Key trong Project, đây là cặp khóa bạn sẽ sử dụng cho Locker SDK ở các bước tiếp theo

Với secrets lưu trong mã nguồn

Với số lượng secrets lưu trong mã nguồn nhỏ, bạn có thể tiến hành cập nhật thủ công lại theo các bước sau:

  • Thêm các secrets bị hardcoding tương ứng lên Locker Secrets Project bạn vừa tạo thông qua giao diện web
  • Cài đặt Secrets SDK tương ứng với ngôn ngữ bạn đang sử dụng tại đây.
  • Sử dụng cặp Access Key và Secret Access Key ở trên để khởi tạo trong SDK Config object
  • Tìm kiếm thủ công vị trí secret của bạn bị hardcoding, tiến hành thay thế lại bằng cách sử dụng SDK để gọi biến secret tương ứng đã được lưu từ trước đó.
💡
Ghi chú: Tính năng cập nhật tự động secrets đang được hoàn thiện và sẽ được cập nhật trong các phiên bản tiếp theo.

Ví dụ minh họa với ngôn ngữ Python

Giả sử bạn có file settings.py bị hardcoding như sau

# ...
DEFAULT_CONFIG = {
  "database": {
    "host": "mysql.myserver.com",
    "port": 3306,
    "username": "my_database",
    "password": "Ol1PPgsG4htlBb0q7THJP7nWyBJXbAJg"
  },
  "request": {
    "access_key_id": "ak29NASAs",
    "secret_token": "qHg34VAGQZwCkUy4UjZQAsCVeH6TvsJg"
  }
}

# ...

Locker CLI đã phát hiện bạn hardcoding ở các dòng

"password": "Ol1PPgsG4htlBb0q7THJP7nWyBJXbAJg"
...
"secret_token": "qHg34VAGQZwCkUy4UjZQAsCVeH6TvsJg"

Bạn sẽ cần tiến hành tạo các secret lên Locker Project qua giao diện web tương ứng như sau:

DATABASE_PASSWORD: Ol1PPgsG4htlBb0q7THJP7nWyBJXbAJg
REQUEST_SECRET_TOKEN: qHg34VAGQZwCkUy4UjZQAsCVeH6TvsJg

Cài đặt Locker Secret SDK và tiến hành thay thế việc hardcoding bằng việc sử dụng SDK

requirements.txt

...
lockerpm
...

Lưu trữ cặp Locker Access Key của bạn đã tạo từ trước đó bằng biến môi trường.

Linux/MacOS

export ACCESS_KEY_ID=<YOUR_ACCESS_KEY_ID>
export SECRET_ACCESS_KEY=<YOUR_SECRET_ACCESS_KEY>

Windows

Powershell

$Env:ACCESS_KEY_ID = <YOUR_ACCESS_KEY_ID>
$Env:SECRET_ACCESS_KEY = <SECRET_ACCESS_KEY>

Command Prompt

set ACCESS_KEY_ID=<YOUR_ACCESS_KEY_ID>
set SECRET_ACCESS_KEY=<YOUR_SECRET_ACCESS_KEY>

Tiến hành khai báo, khởi tạo Locker Secret Manager object

secret_management.py

import os
from locker import Locker

client = Locker(
    access_key_id=os.get_env(ACCESS_KEY_ID),
    secret_access_key=os.get_env(SECRET_ACCESS_KEY),
)

Thay thế việc hardcoding bằng cách dùng SDK gọi biến tại nơi lộ lọt secret của bạn

settings.py

from secret_management import client
# ...
DEFAULT_CONFIG = {
  "database": {
    "host": "mysql.myserver.com",
    "port": 3306,
    "username": "my_database",
    "password": client.get("DATABASE_PASSWORD"),
  },
  "request": {
    "access_key_id": "ak29NASAs",
    "secret_token": client.get("REQUEST_SECRET_TOKEN")
  }
}
# ...

Với secrets lưu trong file chứa biến môi trường

  • Kiểm tra xem file chứa biến môi trường này có cần thiết với dự án không. Nếu không tiến hành xóa bỏ file biến môi trường này
  • Nếu dự án bạn cần các secret trong file chứa biến môi trường này, cấu hình locker với cặp Access Key đã tạo bằng lệnh
locker configuration --access-key-id {access key id} --secret-access-key {secret access key}
  • Lưu secret vào Vault của Locker Secret với lệnh locker secret create:
locker secret create --key {secret key} --value {secret value} --description {secret description (optional)} --environment {secret environment (if the secret is associated with a specific environment)}
  • Sử dụng lệnh locker secret run để chạy dự án với các secret đã được lưu:
locker secret run --environment dev --command your_command

Lệnh locker run sẽ đưa các secret ở một môi trường chỉ định (đã được lưu trên Locker Secret trước đó) vào như là các biến môi trường trong lệnh chạy chương trình của bạn.

  • Xóa secrets lưu trong file chứa biến môi trường của bạn.

Với secrets lưu trong file cấu hình

💡
Tính năng này team đang phát triển và sẽ cập nhật đến với người dùng trong thời gian ngắn nhất.

Gỡ bỏ secrets khỏi Git repo

Không giống như cách tổ chức tệp tin thông thường trong máy tính, Git là một phần mềm với cơ chế lưu tệp tin và tổ chức dữ liệu phức tạp dựa trên phiên bản. Vì thế, nếu bạn xóa hoặc thay đổi nội dung của một tệp tin, nó chỉ đơn giản là xóa và thay đổi ở phiên bản hiện tại trong khi những nội dung đó vẫn tồn tại ở các phiên bản trước, và chúng có thể truy xuất được thông qua các git commit.

Với những dữ liệu nhạy cảm và bí mật, để xóa bỏ hoàn toàn, chúng ta buộc phải xóa toàn bộ lịch sử git commit có liên quan đến tệp tin chứa dữ liệu đó. Có 2 phương pháp chính có thể sử dụng cho công việc này:

  • BFG Repo-Cleaner (gọi tắt là BFG) là một công cụ dùng để viết lại lịch sử commit với chức năng tương tự git filter-branch nhưng tốc độ nhanh hơn 10-720 lần.

Hướng dẫn dưới đây sẽ thực hiện với BFG

Cài đặt

  • Để chạy BFG máy tính bạn cần có môi trường Java. Vui lòng tải xuống và cài đặt Java tương ứng với hệ điều hành của bạn, nếu Java chưa được cài trước đó

Sử dụng BFG để xóa secrets

  • Trước khi chạy BFG hãy tạo một bản sao lưu cho dự án của bạn phòng trường hợp sai sót dẫn đến mất mát dữ liệu
  • Clone repo về máy với flag --mirror. Điều này sẽ giúp chúng ta có được đầy đủ git index và metadata của dự án mà không cần có dữ liệu thực
    • git clone --mirror https://github.com/owner/repo.git
  • Xóa sự tồn tại của file chứa secrets trên toàn bộ lịch sử commit
    • java -jar bfg.jar <file_name> some-big-repo.git
  • Xóa bộ sưu tập rác của repo
    • cd some-big-repo.git
      git reflog expire --expire=now --all && git gc --prune=now --aggressive
 
Trang này có hữu ích với bạn??
Không
Tham gia cộng đồng của chúng tôi