Kết quả
No results found.
Phiên bản 02. Cập nhật:
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.
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)
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
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
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
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:
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.
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")
}
}
# ...
scan fix
Tùy chọn này sẽ thực hiện nạp toàn bộ các secrets của bạn lên dự án Locker tương ứng. Đồng thời nó cũng sẽ tự động thay thế các secrets của bạn trong mã nguồn bằng việc sử dụng SDK gọi biến tương ứng trên dự án Locker:
scan fix
locker scan fix --source <path-to-source-code> --language <program-language>
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"
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, tương tự như với việc cập nhật thu công ở trên.
Sử dụng lệnh scan fix
như sau
locker scan fix --source . --language python
Sau khi sử dụng lệnh này, các secrets sẽ tự động được nạp tự động lên project của bạn với tên key tăng dần như SECRET1, SECRET2 và đồng thời khởi tạo Locker SDK instance và thay thế trong mã nguồn của bạn
secret_manager.py
import os
from locker import Locker
locker_client = Locker(
access_key_id=os.getenv("LOCKER_ACCESS_KEY_ID"),
secret_access_key=os.getenv("LOCKER_SECRET_ACCESS_KEY")
)
settings.py
from secret_management import locker_client
# ...
DEFAULT_CONFIG = {
"database": {
"host": "mysql.myserver.com",
"port": 3306,
"username": "my_database",
"password": locker_client.get("SECRET1"),
},
"request": {
"access_key_id": "ak29NASAs",
"secret_token": locker_client.get("SECRET2")
}
}
# ...
locker configuration --access-key-id {access key id} --secret-access-key {secret access key}
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)}
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.
locker configuration --access-key-id {YOUR_ACCESS_KEY_ID} --secret-access-key {YOUR_SECRET_ACCESS_KEY}
locker secret import --source {CONFIG_FILE_LOCATION}