2010-07-08 36 views
9

Tôi đã đọc Stack Overflow trong một thời gian, nhưng đây là câu hỏi đầu tiên được đăng của tôi.Làm cách nào để đảm bảo ai đó không gửi dữ liệu giả mạo?

Tôi có chương trình theo dõi này được viết bằng C# thu thập thông tin về cách sử dụng máy tính cục bộ và gửi chúng đến máy chủ. Dữ liệu được định dạng XML, được gửi một lần trong khoảng ~ 10 phút.

Vấn đề của tôi: bất kể cách tôi mã hóa dữ liệu XML (có thể đối xứng hoặc không đối xứng), ai đó luôn có thể dịch ngược chương trình theo dõi C# của tôi, tìm ra khóa/chứng chỉ/quy ước mã hóa mà tôi sử dụng và viết chương trình khác gửi giả mạo báo cáo cho máy chủ.

Chương trình theo dõi hoạt động với giả định rằng người dùng đang chạy ứng dụng có thể quan tâm đến việc gửi báo cáo giả mạo.

Câu hỏi: 1) làm cách nào tôi có thể đảm bảo (chắc chắn nhất có thể) dữ liệu được gửi từ trình theo dõi thực thay vì bản sao/trình tạo bản sao? 2) làm thế nào tôi có thể làm xáo trộn mã quá đủ để khôi phục khóa/chứng chỉ/quy ước mã hóa trở thành địa ngục/bên cạnh không thể?

tôi muốn dành ít hoặc tốt nhất là không có tiền về các giải pháp (để 500 $ bộ obfuscate là ra câu hỏi. Tôi là một sinh viên đại học và tôi là rẻ :)

Cảm ơn trước.

+4

Câu trả lời ngắn gọn: Bạn không thể. Các nhà xuất bản phần mềm đặt một lượng thời gian và nỗ lực phi thường vào việc cố gắng một cái gì đó tương tự, và nó luôn bị phá vỡ trong vòng vài giờ sau khi nó trở nên có sẵn. –

+0

Cá nhân tôi sẽ không chi tiêu tiền vào nó, bởi vì ngay cả những giải pháp đắt tiền cũng dễ bị hỏng nếu ai đó quyết tâm cung cấp dữ liệu giả mạo. Bạn không bao giờ có thể "đảm bảo" dữ liệu hợp lệ, chỉ thử và ngăn mọi người cố gắng. –

Trả lời

0

1.Cách tiếp cận khác: Giả sử bạn không thay đổi tệp thi hành thường xuyên. tạo một DigSig (HASH + Encrypt) ảnh tệp thực thi ứng dụng khách của bạn và gửi nó cùng với, nó sẽ xác thực ứng dụng khách của bạn là ứng dụng khách thực và không phải là phiên bản đã sửa đổi.

Nhưng điều này không thể ngăn chặn dữ liệu được gửi bởi một ứng dụng hoàn toàn khác có thể chứa được Digsig của ảnh thực thi của bạn.

+1

Diffie-Hellman thêm rất ít giá trị gia tăng mà không có bên thứ ba. Khá dễ dàng để MitM nếu tất cả mọi thứ bạn cần là trên máy. –

+0

@erickson Yeah. Điều đó thật ngu ngốc. Đối với kịch bản của OP, nó không quan trọng nếu đối xứng của nó/không đối xứng. –

1

Về lý thuyết, một ứng dụng đơn giản không thể tự bảo mật khi chạy trong môi trường không tin cậy. Vì vậy, câu trả lời cho câu hỏi đầu tiên là "Bạn không bao giờ có thể là chắc chắn dữ liệu đó được gửi bởi trình theo dõi thực".

Trong thực tế, việc làm xáo trộn sẽ ngăn chặn kẻ tấn công tới một điểm. Điểm được xác định bởi chất lượng của obfuscation động lực của kẻ tấn công. Vì vậy, câu trả lời cho câu hỏi thứ hai phụ thuộc vào kẻ tấn công là ai, họ có khả năng như thế nào và tài nguyên nào họ có thể áp dụng cho vấn đề này. Obfuscation đó là "địa ngục/tiếp theo-để-không thể" cho một layman unmotivated để làm sáng tỏ có thể là tầm thường cho một chuyên gia, hoặc một người có thể thuê một chuyên gia.

Here is a list trong số một số kẻ lừa đảo C#.

+0

hãy kiểm tra .net phản xạ, một trong những trình giải mã tốt nhất mà tôi từng thấy (và miễn phí) –

1

Người dùng máy khách có quyền quản trị viên trên máy không? Có vẻ như loại ứng dụng sẽ được quản trị viên cài đặt nhưng được người dùng không phải quản trị sử dụng. Nếu có, bạn có thể lưu trữ khóa hoặc băm được bảo vệ khỏi người dùng thông thường và chạy ứng dụng trong ngữ cảnh của người dùng quản trị viên. Tôi không thực sự quen thuộc với kho khóa, nhưng tôi hy vọng tất cả các phiên bản Windows (ít nhất là XP +) sẽ có chức năng này. Nếu không phải là kho khóa, thì có thể một tệp nằm trong thư mục được mã hóa thuộc về người dùng quản trị.

Nếu người dùng mục tiêu của bạn có quyền quản trị cục bộ, thì tôi thực sự không thấy cách bạn có thể ngăn chặn chúng.

+0

"chạy ứng dụng trong ngữ cảnh của quản trị viên". Đó sẽ là một lỗ hổng bảo mật tiềm ẩn. – jgauffin

+0

Làm thế nào về chỉ trong bối cảnh của một người dùng không phải quản trị viên khác nhau? –

1

Dường như nó là vô vọng.Trình theo dõi của bạn có thể dựa vào Windows để cung cấp các số liệu, chẳng hạn như bằng cách gọi cuối cùng là GetUserName()/GetTickCount()/CollectPerformanceData()/etc. Vì vậy, một kẻ xấu chỉ cần bẫy mã của bạn (bất kể nó bị xáo trộn như thế nào, và không làm phiền dịch ngược) tại bất kỳ điểm quan tâm Windows nào, thay thế dữ liệu giả mạo và để mã của bạn tiếp tục theo cách vui vẻ.

Cuộc sống quá ngắn để đánh đầu bạn chống lại những loại tường gạch đó.

1

Chúng tôi đã sử dụng giải pháp phần cứng để cung cấp chức năng được yêu cầu này.

Tôi đã làm việc với một sản phẩm gọi là IronKey, nó là thiết bị phần cứng có khả năng tạo chữ ký số. Khi chúng tôi phát hành thiết bị, chúng tôi lưu trữ khóa công khai trên máy chủ của chúng tôi. khi ứng dụng khách của chúng tôi gửi dữ liệu, chúng tôi tạo chữ ký bằng khóa riêng, khi chúng tôi nhận được dữ liệu, chúng tôi có thể xác minh rằng nó đã được gửi từ đúng máy khách bằng khóa công khai.

+0

Điều đó chứng tỏ báo cáo được gửi từ một hộp có khóa, nhưng nó không đảm bảo dữ liệu không bị giả mạo bởi phần mềm được sửa đổi đang chạy trên hộp. –

+0

Dữ liệu được ký bởi thiết bị, máy khách gửi cả dữ liệu và chữ ký đến máy chủ, máy chủ xác minh chữ ký dựa vào dữ liệu và chữ ký bằng khóa công khai đã lưu. Nếu xác minh không thành công thì chúng tôi biết rằng dữ liệu đã bị giả mạo hoặc chúng đang sử dụng khóa riêng sai. Ironkey không chỉ là một dongle, nó cung cấp phần cứng ký và xác minh thông qua pkcs11. –

+0

anh ấy tạo dữ liệu theo chương trình cứ 10 phút một lần. ký dữ liệu không đảm bảo chương trình của anh ta không bị xâm phạm. –

2

Như Raph Koster once put it, viết về cuộc chiến chống lại tin tặc ở client-server trò chơi trực tuyến,

Không bao giờ tin tưởng cho khách hàng. Không bao giờ đặt bất cứ thứ gì lên máy khách. Khách hàng nằm trong tay của kẻ thù. Đừng bao giờ quên điều này.

Thật không may, đối với khá nhiều bất kỳ ứng dụng thực tế mà đòi hỏi sức mạnh xử lý của khách hàng được sử dụng, một cái gì đó phải được đặt trên máy khách, và do đó vì có sẵn cho một âm mưu tấn công. Câu hỏi cần được hỏi - như với bất kỳ biện pháp an ninh nào - bạn đã chuẩn bị bao nhiêu thời gian và tiền bạc để giảm thiểu rủi ro này?

Một số người muốn chỉ ra cho mọi người hỏi về các cơ chế cấp phép hoặc làm xáo trộn phía khách hàng, "ồ không có vấn đề gì, cuối cùng nó sẽ bị hỏng". Nhưng điều này là bỏ lỡ vấn đề: rằng mục đích của các biện pháp như vậy là thúc đẩy 'cuối cùng' hơn nữa trong tương lai, đến mức mà đối với kẻ tấn công không được xác định, nó sẽ là 'không bao giờ'.

Ví dụ: nếu ứng dụng của bạn gửi dữ liệu của mình bằng email văn bản thuần túy, điều đó sẽ đánh bại khoảng 0 kẻ tấn công. Gửi nó trong email rot13 sẽ đánh bại 5% kẻ tấn công. Gửi nó được mã hóa bằng cách sử dụng tên người dùng như là một chìa khóa sẽ đánh bại nhiều hơn nữa. Obfuscating mã gửi với một obfuscator miễn phí sẽ đánh bại nhiều hơn nữa. Obfuscating với một obfuscator cấp thương mại sẽ đánh bại nhiều hơn nữa. Yêu cầu mỗi khách hàng có một dongle phần cứng sẽ đánh bại 'tất cả trừ những kẻ tấn công được xác định nhất', như những người muốn nói - nhưng điều này có lẽ sẽ là một chi phí không thể chấp nhận được.

Từ "Tôi là sinh viên đại học" Tôi đoán đây không phải là dự án nhạy cảm nhất bao giờ hết. Sử dụng một obfuscator miễn phí và cnrypt dữ liệu được gửi bằng cách sử dụng một số thông tin người dùng cụ thể như là chìa khóa. Điều đó có thể sẽ làm.

Các vấn đề liên quan