Một khám phá gần đây trong cộng đồng nhà phát triển đã tiết lộ các mẫu hình ảnh đơn giản có thể giúp xác định loại dữ liệu nào được ẩn bên trong các chuỗi được mã hóa base64. Phát hiện này đã gây ra cuộc thảo luận rộng rãi trong số các lập trình viên làm việc với dữ liệu được mã hóa hàng ngày.
Khám phá này bắt đầu khi một nhà phát triển đang kiểm tra những gì có vẻ như là một tệp cấu hình được mã hóa cho một dự án homelab. Tệp này chứa một trường đáng ngờ có tên key_provider.pbkdf2.password_key với một chuỗi được mã hóa dài. Một đồng nghiệp đã nhanh chóng xác định nó là JSON được mã hóa base64 chỉ bằng cách nhìn vào mẫu.
Mẫu ey tiết lộ dữ liệu JSON
Mẫu được thảo luận rộng rãi nhất là tiền tố ey xuất hiện ở đầu các đối tượng JSON được mã hóa base64. Điều này xảy ra bởi vì các đối tượng JSON luôn bắt đầu bằng dấu ngoặc nhọn mở { theo sau là dấu ngoặc kép, điều này luôn được mã hóa thành ey trong base64. Các thành viên cộng đồng thấy điều này đặc biệt hữu ích để phát hiện các JWT token, là các token xác thực dựa trên JSON thường được sử dụng trong các ứng dụng web.
JWT tất cả đều nghe như eyyyyyy trong đầu tôi.
Mẫu này hoạt động bởi vì mã hóa base64 là xác định - cùng một đầu vào luôn tạo ra cùng một đầu ra. Khi JSON bắt đầu với định dạng chuẩn của dấu ngoặc nhọn mở và dấu ngoặc kép, nó tạo ra chữ ký có thể nhận biết này.
Các Mẫu Base64 Phổ Biến
Mẫu | Loại Dữ Liệu | Ví Dụ Bắt Đầu |
---|---|---|
ey |
Đối tượng JSON | {"key": "value"} |
LS |
Chứng chỉ/khóa PEM | -----BEGIN CERTIFICATE----- |
MII |
Đối tượng ASN.1 DER | Dữ liệu chứng chỉ nhị phân |
Vm0 |
Điểm cố định tựa Base64 | Mã hóa tự tham chiếu |
Phát hiện chứng chỉ và khóa riêng
Một mẫu khác đã thu hút sự chú ý là tiền tố LS, cho biết các chứng chỉ hoặc khóa riêng được mã hóa base64. Mẫu này xuất hiện từ định dạng PEM chuẩn bắt đầu bằng -----BEGIN CERTIFICATE----- hoặc các tiêu đề tương tự. Các dấu gạch ngang đầu tiên luôn được mã hóa thành LS trong base64.
Tuy nhiên, các thành viên cộng đồng đã lưu ý rằng điều này không hoàn toàn chính xác. Các tệp YAML bắt đầu bằng dấu hiệu tài liệu --- cũng sẽ tạo ra cùng tiền tố LS, làm cho mẫu này ít cụ thể hơn so với chỉ báo JSON.
Hiểu biết kỹ thuật và phản ứng của cộng đồng
Cuộc thảo luận đã tiết lộ các mức độ sâu sắc kỹ thuật khác nhau trong cộng đồng nhà phát triển. Một số thành viên đã cung cấp các giải thích chi tiết về cách thức hoạt động của mã hóa base64 về mặt toán học, phân tích thao tác bit tạo ra các mẫu này. Những người khác đã chia sẻ các mẫu bổ sung mà họ đã học được qua kinh nghiệm, chẳng hạn như MII cho một số định dạng chứng chỉ nhất định.
Phản ứng khá trái chiều, với một số nhà phát triển có kinh nghiệm lưu ý rằng các mẫu này rõ ràng đối với bất kỳ ai thường xuyên làm việc với dữ liệu được mã hóa. Những người khác thấy thông tin này thực sự hữu ích, đặc biệt là những người không thường xuyên gặp base64 trong công việc hàng ngày.
Quy trình mã hóa Base64
- Nhận 3 byte (24 bit) dữ liệu đầu vào
- Nhóm thành bốn phân đoạn 6-bit
- Mỗi phân đoạn trở thành một ký tự base64
- Thêm padding bằng
=
khi độ dài đầu vào không chia hết cho 3 - Đầu ra luôn lớn hơn đầu vào 33%
Tác động bảo mật
Một điểm quan trọng được nêu ra trong cuộc thảo luận cộng đồng là base64 không phải là mã hóa - nó chỉ đơn giản là một phương pháp mã hóa mà bất kỳ ai cũng có thể dễ dàng giải mã. Ví dụ ban đầu đã làm nổi bật một thực hành bảo mật đáng lo ngại khi dữ liệu cấu hình nhạy cảm được mã hóa base64 và lưu trữ trong một kho lưu trữ công cộng, nhầm tưởng rằng điều này cung cấp sự bảo vệ.
Khám phá này vừa là một công cụ gỡ lỗi hữu ích vừa là lời nhắc nhở rằng mã hóa thích hợp, không chỉ là mã hóa, là cần thiết để bảo vệ thông tin nhạy cảm. Đối với các nhà phát triển thường xuyên làm việc với API, chứng chỉ và tệp cấu hình, các mẫu hình ảnh này có thể tăng tốc các tác vụ khắc phục sự cố và xác định dữ liệu.
Tham khảo: You can spot base64 encoded JSON, certificates, and private keys