Rủi ro khi triển khai các ký hiệu gỡ lỗi (tệp pdb) trong môi trường sản xuất là gì?


81

Tôi có một ứng dụng ghi lại các dấu vết chuỗi ngoại lệ và tôi muốn các dấu vết ngăn xếp đó bao gồm tên tệp và số dòng khi được triển khai trong sản xuất. Tôi đã tìm ra cách triển khai các ký hiệu gỡ lỗi w / assembly, nhưng trong quá trình nghiên cứu vấn đề, tôi gặp phải câu hỏi này , điều này ngụ ý rằng không nên đưa các tệp pdb vào môi trường sản xuất. Nhận xét cho câu trả lời được chấp nhận có nội dung "... thông tin gỡ lỗi có thể cung cấp dữ liệu nhạy cảm và là một vectơ tấn công. Tùy thuộc vào ứng dụng của bạn là gì."

Vậy loại dữ liệu nhạy cảm nào có thể bị lộ? Làm thế nào để các ký hiệu gỡ lỗi có thể được sử dụng để xâm phạm ứng dụng? Tôi tò mò về các chi tiết kỹ thuật, nhưng những gì tôi thực sự đang tìm kiếm là một cách thực tế để đánh giá rủi ro khi bao gồm các ký hiệu gỡ lỗi cho bất kỳ ứng dụng và môi trường sản xuất nào. Hay nói một cách khác: điều tồi tệ nhất có thể xảy ra là gì?

CHỈNH SỬA: câu hỏi tiếp theo / làm rõ

Vì vậy, dựa trên câu trả lời của mọi người cho đến nay, có vẻ như câu hỏi này có thể được đơn giản hóa một chút cho các ứng dụng .NET. Điều này từ blog của John Robbins được liên kết trong câu trả lời của Michael Maddox đã làm tôi thất vọng:

Một .NET PDB chỉ chứa hai phần thông tin, tên tệp nguồn và các dòng của chúng và tên biến cục bộ. Tất cả các thông tin khác đã có trong siêu dữ liệu .NET nên không cần sao chép cùng một thông tin trong tệp PDB.

Đối với tôi, điều này nhắc lại những gì người khác đã nói về Reflector, với ngụ ý rằng vấn đề thực sự là quyền truy cập vào các hội đồng. Khi điều đó đã được xác định, quyết định duy nhất cần thực hiện đối với PDB là bạn có quan tâm đến việc để lộ tên tệp, số dòng và tên biến cục bộ hay không (giả sử rằng bạn không hiển thị dấu vết ngăn xếp cho người dùng cuối bắt đầu). Hay tôi đã đơn giản hóa điều này quá nhiều?


@Matt: Đây là ứng dụng Desktop, web, compact hay ...?
Kb.

@Kb - trong trường hợp cụ thể này, đó là một ứng dụng bảng điều khiển mà chúng tôi chạy với bộ lập lịch. Nó đã được phát triển nội bộ để sử dụng nội bộ, vì vậy bất kỳ ai có thể xem tệp pdb cũng sẽ có thể xem mã nguồn, vì vậy tôi không quá lo lắng về ứng dụng cụ thể này. Tôi quan tâm nhiều hơn đến trường hợp chung / thực tế để tôi có thể quyết định có mạo hiểm hay không với các ứng dụng khác, chẳng hạn như ứng dụng dành cho máy tính để bàn được cài đặt trên máy tính xách tay đôi khi được kết nối với dữ liệu nhạy cảm trên mạng của chúng tôi.
Matt

Câu trả lời:


58

Đây là một câu hỏi khác để xem xét:

Có bất kỳ vấn đề bảo mật nào để lại các tệp gỡ lỗi PDB trên các máy chủ đang hoạt động không?

Và thêm thông tin về các tệp PDB:

Tệp PDB: Điều mà mọi nhà phát triển phải biết

Nói chung, tôi luôn bao gồm các tệp pdb trong các triển khai của mình, lợi nhuận thu được là quá lớn để bỏ qua.

Nếu bạn không bao giờ để lộ dấu vết ngăn xếp cho người dùng của mình (và nói chung là không nên làm như vậy), thì thực sự không có bất kỳ rủi ro bảo mật bổ sung nào khi triển khai các tệp PDB.

Khi một dấu vết ngăn xếp có thể nhìn thấy của người dùng xảy ra, người dùng có thể thấy toàn bộ dấu vết ngăn xếp bao gồm tên tệp và số dòng tệp của bạn. Điều này có thể cung cấp cho họ một số ý tưởng về cách ứng dụng của bạn được cấu trúc, điều này có thể giúp họ nếu bị hack.

Một mối đe dọa bảo mật lớn hơn là một cái gì đó giống như Reflector khi được sử dụng trên các tệp DLL của bạn sẽ cho phép chúng xem mã nguồn của bạn, có hoặc không có tệp pdb.


3
Cảm ơn cho các liên kết. Vì vậy, có vẻ như ít nhất một phần của phương trình là nơi ứng dụng được triển khai (tức là máy tính để bàn v. Máy chủ web).
Matt

15

Nếu bạn đang triển khai môi trường sản xuất trong tổ chức của mình, thì đó không phải là vấn đề bảo mật.

Nếu bạn đang bán phần mềm của mình cho các tổ chức khác, thì tệp .pdb có thể giúp ai đó quan tâm đến thiết kế ngược hỗ trợ - đó có thể là vấn đề với bạn.

Tuy nhiên (nói rõ), bạn không muốn các dấu vết ngăn xếp của mình được hiển thị cho máy khách - cho dù tệp .pdbs có sẵn hay không. Nhưng nếu bạn chỉ ghi lại các dấu vết và hiển thị một trang lỗi 'khá' cho khách hàng, thì đó không phải là vấn đề.


Tôi tin rằng Matt đang nói về .Net. Thông tin bổ sung nào mà người ta có thể nhận được từ một PDB chưa có sẵn thông qua một công cụ như Lutz 'Reflector?
Lars Truijens

Nguồn và thông tin dòng ngay lập tức được ghi nhớ. Tôi không tin rằng các tên biến cục bộ có trong siêu dữ liệu.
Michael

@Lars - Tôi chưa bao giờ nói rằng nó sẽ giúp ích :) Tôi nghĩ rằng toàn bộ nỗi sợ hãi xung quanh PDB và kỹ thuật đảo ngược là rất sai chỗ. Loại người có thể sử dụng PDB để thiết kế ngược có thể sử dụng một trình tháo gỡ phù hợp hỗ trợ chú thích.
Michael

1
Tôi có thể thấy tên biến cục bộ trong các phương thức rất dài có thể giúp thiết kế ngược, nhưng tên tệp nguồn và thông tin dòng? Không thực nguy cơ so với các công cụ như Reflector nếu bạn hỏi tôi :)
Lars Truijens

1
@Lars - Tôi nghĩ rằng một cách khác để thể hiện những gì Michael Maddox và tôi đang nói là việc trao .pdbs cho người có các tập hợp thường không thực sự là một rủi ro bảo mật. Có thể tạo ra một dấu vết ngăn xếp cho những người không có assmeblies.
Michael Burr

11

Bằng cách có các ký hiệu gỡ lỗi, kẻ tấn công có thể xác định các biến toàn cục, hiệu số chức năng, v.v., được quan tâm.

Vì vậy, anh ấy có thể thấy hệ thống của bạn có chức năng như:

AddAdminUser(string name, string password);

Và biết bù đắp của nó. Nếu chương trình của bạn bị xâm phạm, anh ta có thể gọi hàm này để tự cấp cho mình đặc quyền quản trị viên.

Hoặc một cái gì đó như:

typedef enum {Basic, NTLM} AuthenticationMode;
AuthenticationMode g_authenticationMode;

Và biết những gì cần lật để chuyển ứng dụng của bạn sang chế độ không an toàn.

Ngoài ra, điều này sẽ mất khá nhiều thời gian thiết kế ngược để tìm ra. Tuy nhiên, không phải là một khoảng thời gian không thể vượt qua.

Nhưng . . . Tất cả điều này ngụ ý kẻ tấn công của bạn đã ở một vị trí mà anh ta có thể xâm phạm chương trình của bạn. Nếu đúng như vậy thì bạn đã thua rồi.

Nếu bạn có lý do kinh doanh chính đáng để triển khai các biểu tượng pdb, hãy tiếp tục. Triển khai PDB's sẽ không khiến bạn bất an. Nếu bạn không có lý do chính đáng để triển khai, bạn không nên làm điều này vì nó sẽ khiến các cuộc tấn công dễ dàng hơn một chút.

Bạn cũng có thể tạo các tệp PDB công khai - những tệp này tách một số thông tin nhất định, nhưng cung cấp cho bạn đủ ký hiệu để tạo dấu vết ngăn xếp và thực hiện gỡ lỗi cơ bản. Thông tin chi tiết có tại đây . Microsoft triển khai PDB công khai trên máy chủ biểu tượng của mình để mọi người sử dụng.

CHỈNH SỬA: Hầu hết những gì tôi đã nói đều áp dụng cho những mối quan tâm xung quanh việc triển khai PDB cho mã gốc - tôi nghĩ rằng rất nhiều mối quan tâm này mà mọi người chuyển sang .NET, mặc dù siêu dữ liệu lắp ráp đã truyền tải khá nhiều điều này rồi.


6
Tôi tin rằng Matt đang nói về .Net. Bạn đã có thể lấy tất cả nguồn từ một công cụ như Lutz 'Reflector ngay cả khi không có PDB.
Lars Truijens

@Lars - Đã cập nhật nhận xét của tôi để nói rằng hầu hết đây là mã gốc. Tôi nghĩ rằng nhiều người chỉ sợ hãi vô cớ rằng PDB có thể thực hiện kỹ thuật đảo ngược và tin rằng những kẻ tấn công không biết cách sử dụng các trình tháo gỡ như IDA Pro. Tôi tin rằng những nỗi sợ hãi này cũng được đưa vào mã được quản lý một cách không chính xác.
Michael

2

Ai đó có thể "khôi phục" mã nguồn hoàn chỉnh của ứng dụng của bạn. Nếu nó là Mã nguồn mở, bạn không cần phải lo lắng. Nếu nó có một số IP (thuật toán, bảo vệ, giấy phép), nó có lẽ không phải là một ý kiến ​​hay.

Đúng là các công cụ như Reflector có thể tái tạo lại các phần mã của bạn ngay cả khi không có tệp PDB, nhưng sự xáo trộn có thể giúp ích (tốt, chỉ một chút).


1
Tôi tin rằng Matt đang nói về .Net. Bạn đã có thể lấy tất cả nguồn từ một công cụ như Lutz Reflector ngay cả khi không có PDB.
Lars Truijens

Lars, tôi hoàn toàn đồng ý, Reflector là công cụ tuyệt vời để thiết kế ngược. Nhưng đôi khi mã kết quả không dễ đọc, đặc biệt là nếu nguồn bị xáo trộn. Các tệp PDB sẽ làm cho cuộc sống thậm chí còn tốt hơn.
db_
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.