NhaLapTrinh.comNhà Lập Trình
Bảo mật cơ bản

Lỡ đưa khoá bí mật lên kho mã thì làm gì?

Nếu lỡ đưa mật khẩu hay khoá bí mật lên kho mã, việc đầu tiên là thu hồi và tạo khoá mới ngay, không phải xoá tệp. Xoá dòng đó đi thì khoá vẫn nằm trong lịch sử thay đổi và có thể đã bị sao chép. Sau đó kiểm tra nhật ký xem khoá đã bị dùng chưa, rồi sửa quy trình để không lặp lại.

🎙️
📑 Nội dung theo chương
  1. 0:40 Vì sao xoá đi là chưa đủ
  2. 1:33 Mười phút đầu: thu hồi và đổi khoá
  3. 2:18 Những ngày sau: khoá đã bị dùng chưa?
  4. 3:09 Giữ bí mật ra khỏi mã nguồn
  5. 3:56 Văn hoá không đổ lỗi
  6. 4:43 Câu hỏi thường gặp
🔊 Bản audio (lồng nhạc nền)

Nếu lỡ đưa mật khẩu hay khoá bí mật lên kho mã, việc đầu tiên là thu hồi khoá đó và tạo khoá mới ngay lập tức, chứ không phải xoá tệp. Xoá dòng đó đi thì khoá vẫn nằm trong lịch sử thay đổi, và có thể đã bị sao chép. Sau khi đổi khoá, hãy kiểm tra xem khoá cũ đã bị dùng chưa, rồi sửa quy trình để chuyện này không lặp lại.

Chào bạn, đây là Nhà Lập Trình. Đây là sai lầm mà rất nhiều người làm nghề từng mắc ít nhất một lần, kể cả người giỏi. Một tệp cấu hình có mật khẩu cơ sở dữ liệu, một khoá dịch vụ gửi thư, một khoá của dịch vụ lưu trữ, vô tình đi theo một lần lưu thay đổi. Tập này kể cần làm gì trong mười phút đầu, và cả những ngày sau đó.

Vì sao xoá đi là chưa đủ

Phản xạ đầu tiên của hầu hết mọi người là xoá dòng chứa khoá rồi lưu một thay đổi mới. Trên trang hiện tại, khoá biến mất. Nhưng hệ thống quản lý phiên bản giữ lại mọi phiên bản cũ. Ai xem lịch sử thay đổi vẫn thấy khoá rõ ràng.

Nếu kho mã công khai, bạn phải giả định rằng khoá đã bị nhìn thấy. Có những chương trình tự động quét liên tục các kho mã công khai để tìm khoá bí mật bị lộ, và chúng có thể tìm thấy trong thời gian rất ngắn sau khi bạn đưa lên.

Ngay cả kho mã riêng tư cũng không an toàn tuyệt đối. Nhiều người có quyền truy cập, trong đó có người sau này rời công ty. Kho mã có thể được sao chép về nhiều máy. Một ngày nào đó quyền truy cập có thể bị cấu hình sai.

Có những công cụ để viết lại lịch sử, xoá hẳn khoá khỏi mọi phiên bản cũ. Nên làm, nhưng làm sau. Nó không thu hồi được những bản đã bị sao chép. Việc cấp bách nhất là làm cho khoá bị lộ trở nên vô dụng.

Mười phút đầu: thu hồi và đổi khoá

Hãy vào nơi cấp khoá đó: bảng quản trị của dịch vụ, cơ sở dữ liệu, tài khoản lưu trữ. Thu hồi hoặc vô hiệu hoá khoá bị lộ, tạo khoá mới. Với mật khẩu cơ sở dữ liệu, đổi mật khẩu.

Rồi cập nhật khoá mới vào những nơi chương trình đang chạy cần dùng. Thứ tự này có thể làm dịch vụ gián đoạn vài phút giữa lúc thu hồi khoá cũ và cập nhật khoá mới. Chấp nhận điều đó. Vài phút gián đoạn rẻ hơn nhiều so với để khoá bị lộ còn hiệu lực.

Nếu dịch vụ cho phép có hai khoá cùng lúc, có thể tạo khoá mới trước, cập nhật vào chương trình, rồi mới thu hồi khoá cũ. Nhưng đừng để khoảng này kéo dài.

Báo cho người phụ trách ngay, dù là trưởng nhóm hay chủ doanh nghiệp. Đừng giấu vì ngại. Người khác có thể biết những nơi khác cũng đang dùng khoá đó mà bạn không biết.

Những ngày sau: khoá đã bị dùng chưa?

Sau khi khoá đã bị vô hiệu, câu hỏi tiếp theo là trong khoảng thời gian nó bị lộ, có ai dùng nó không. Xem nhật ký truy cập của dịch vụ: có yêu cầu nào từ địa chỉ lạ, vào giờ lạ, với khối lượng lạ không.

Với khoá của dịch vụ điện toán đám mây, xem có máy chủ nào lạ được tạo ra không. Kẻ lấy được khoá loại này hay dùng nó để chạy máy đào tiền ảo, và hoá đơn cuối tháng có thể rất lớn. Với khoá dịch vụ gửi thư, xem có đợt gửi thư rác nào không. Với mật khẩu cơ sở dữ liệu, xem có truy cập từ nơi lạ không.

Nếu phát hiện khoá đã bị dùng, sự việc trở thành một sự cố bảo mật thật sự, cần xử lý bài bản hơn. Mình có một tập riêng về những giờ đầu khi phát hiện bị xâm nhập.

Nếu không phát hiện gì, vẫn ghi lại sự việc: khoá nào, lộ lúc nào, đổi lúc nào, đã kiểm tra những gì. Nếu sau này có gì bất thường, bạn có sẵn dòng thời gian.

Giữ bí mật ra khỏi mã nguồn

Gốc rễ của vấn đề là bí mật nằm trong mã. Cách phòng là tách bí mật ra khỏi mã hoàn toàn. Mã chỉ biết tên của bí mật, còn giá trị được cung cấp lúc chạy, qua biến môi trường, qua tệp cấu hình nằm ngoài kho mã, hoặc qua một dịch vụ quản lý bí mật chuyên dụng.

Tệp cấu hình chứa bí mật phải được đưa vào danh sách bỏ qua của hệ thống quản lý phiên bản ngay từ ngày đầu dự án. Trong kho mã chỉ có một tệp mẫu với giá trị giả, cho người mới biết cần điền những gì.

Có những công cụ kiểm tra tự động trước mỗi lần lưu thay đổi, quét xem có gì trông giống khoá bí mật không, và chặn lại nếu có. Cài nó vào dự án là một khoản đầu tư nhỏ đáng giá.

Mỗi môi trường nên có bí mật riêng: máy thử nghiệm một khoá, máy thật một khoá khác. Nếu khoá thử nghiệm bị lộ, máy thật vẫn an toàn.

Văn hoá không đổ lỗi

Điều cuối cùng mình muốn nói không phải về kỹ thuật. Người vừa lỡ đưa khoá lên thường rất hoảng và xấu hổ. Nếu đội có thói quen trách mắng, lần sau người đó, hoặc người khác, sẽ có xu hướng giấu đi và tự xoá âm thầm. Đó là kịch bản tệ nhất, vì khoá vẫn còn hiệu lực.

Đội tốt khuyến khích báo ngay, cảm ơn người báo, cùng xử lý, rồi cùng tìm cách sửa quy trình. Câu hỏi đúng không phải là ai làm, mà là vì sao quy trình để chuyện này xảy ra được.

Một chị trưởng nhóm ở Hà Nội kể lần đầu một bạn mới trong đội lỡ đưa khoá lên, chị cảm ơn bạn ấy trước cả đội vì đã báo trong vòng năm phút. Sau lần đó, cả đội cài công cụ kiểm tra tự động, và không ai phải xấu hổ nữa.

Bí mật bị lộ là chuyện có thể xảy ra với bất kỳ ai. Khác biệt giữa sự cố nhỏ và thảm hoạ thường chỉ là mười phút đầu tiên.

Câu hỏi thường gặp

Xoá khoá bí mật khỏi kho mã có đủ an toàn không?

Không đủ. Khoá vẫn còn trong lịch sử thay đổi và có thể đã bị sao chép. Việc đầu tiên phải làm là thu hồi khoá cũ và tạo khoá mới.

Kho mã riêng tư có cần lo lộ khoá không?

Vẫn cần. Nhiều người có quyền truy cập, kho có thể được sao chép về nhiều máy, và quyền truy cập có thể bị cấu hình sai. Bí mật không nên nằm trong mã dù kho công khai hay riêng tư.

Nên lưu mật khẩu cơ sở dữ liệu ở đâu?

Ở ngoài mã nguồn, như biến môi trường, tệp cấu hình nằm ngoài kho mã, hoặc dịch vụ quản lý bí mật. Trong kho mã chỉ nên có tệp mẫu với giá trị giả.

Làm sao biết khoá bị lộ đã bị ai dùng chưa?

Xem nhật ký truy cập của dịch vụ cấp khoá trong khoảng thời gian bị lộ, tìm yêu cầu từ địa chỉ lạ, giờ lạ hoặc khối lượng bất thường, và kiểm tra hoá đơn dịch vụ.

Có công cụ nào chặn việc đưa khoá lên kho mã không?

Có những công cụ quét tự động trước mỗi lần lưu thay đổi để phát hiện chuỗi trông giống khoá bí mật và chặn lại. Nhiều dịch vụ lưu trữ mã cũng có chức năng cảnh báo tương tự.

Cần tư vấn cụ thể cho trường hợp của bạn?

Chúng tôi sẽ liên hệ trong vòng 24 giờ.

Đăng ký tư vấn ngay

Bài viết liên quan

Bạn cần hỗ trợ thêm?

Để lại thông tin, chúng tôi sẽ liên hệ trong 24 giờ.