Làm cách nào để ngăn người dùng chia sẻ chứng chỉ trong OpenVPN?


8

Tôi có một máy chủ OpenVPN sử dụng chứng chỉ và xác thực LDAP.

Vấn đề là, một người dùng có thể chia sẻ chứng chỉ của mình và những người dùng LDAP hợp lệ khác có thể sử dụng chứng chỉ này.

Câu hỏi

Làm cách nào để đảm bảo rằng chứng chỉ của Bob chỉ có thể được sử dụng với người dùng LDAP "bob"?

Câu trả lời:


9

Theo bài đăng này , common_namengười dùng không thể giả mạo.

Thêm phần này vào openvpn server.conf

script-security 2

# untrusted state
auth-user-pass-verify /etc/openvpn/scripts/check_cn_on_connect.sh via-env

/etc/openvpn/scripts/check_cn_on_connect.sh chứa đựng

#!/bin/bash

# username and common_name must be the same to allow access.
# users are not allowed to share their cert
if [ $username != $common_name ]; then
   echo "$(date +%Y%m%d-%H%M%S) DENIED  username=$username cert=$common_name" >> /var/log/openvpn-access.log
   exit 1
fi

echo "$(date +%Y%m%d-%H%M%S) GRANTED username=$username cert=$common_name" >> /var/log/openvpn-access.log

exit 0

Cập nhật

Đây là cho OpenVPN 2.1.4. Trong 2.2.0, họ đã thêm nhiều biến mới mà bạn có thể thấy env >> /tmp/env, trong đó một trong những biến mới này là dấu vân tay / số sê-ri.


4

Có nhiều tùy chọn, vì OpenVPN là một dự án nguồn mở và nó có khả năng viết móc xác thực của riêng bạn, có nhiều người đã thực hiện nhiều điều khác nhau để cung cấp các mức xác thực khác nhau.

Tôi đã không thử hầu hết những thứ này chỉ thấy chúng được đề cập trong các tài liệu / blog / maillists. Một số trong số này có thể yêu cầu các bản vá hoặc phiên bản không miễn phí.

Một phương pháp chính sẽ là làm cho phần riêng tư của cặp khóa của bạn rất khó trích xuất / sao chép.

Nếu việc bảo vệ khóa của họ là cấm chi phí, không được hỗ trợ trên nền tảng máy khách của bạn hoặc không thể vì một số lý do khác thì bạn chỉ còn một vài lựa chọn.

  • Yêu cầu gia hạn thường xuyên chứng chỉ, vì vậy chứng chỉ được sao chép có thể được sử dụng lâu dài.
  • Đặt nhiều đăng nhập trên máy chủ của bạn, để theo dõi sự bất thường. Nếu Bob thường chỉ đăng nhập từ nhà của anh ấy, và rồi một ngày, anh ấy bắt đầu đăng nhập từ Acme Inc. thì bạn có thể cần phải điều tra.

  • Thiết lập xác thực đa yếu tố. Chứng chỉ của bạn được tính là "thứ bạn có". Vì vậy, bạn nên xem xét các lựa chọn thay thế trong 'cái gì đó bạn là' hoặc 'cái gì đó bạn biết'. Điều này bao gồm số liệu sinh học, hoặc mật khẩu / cụm từ.

  • Như tôi đã đề cập OpenVPN cung cấp xác thực rất linh hoạt. Điều này sử dụng auth-user-pass-verifytùy chọn. Tùy chọn này chuyển tên người dùng và mật khẩu được cung cấp cho một tập lệnh / chương trình bên ngoài sẽ đưa ra quyết định xác thực dựa trên bất cứ điều gì bạn muốn.

Tôi có thể sử dụng auth-user-pass-verify /etc/openvpn/scripts/connect.sh via-envđể có được tên người dùng của người dùng. Bạn có biết nếu tôi cũng có thể lấy ID từ chứng chỉ mà người dùng đang sử dụng không? Nếu vậy, thì tôi có thể viết một tập lệnh Perl để kiểm tra tệp yaml với ID chứng chỉ đã biết.
Sandra

1
Thật không may, tôi không biết một phương pháp để lấy id / chủ đề / chi tiết từ chứng chỉ được sử dụng, nhưng điều đó không có nghĩa là không thể.
Zoredache

Tìm thấy giải pháp và đăng nó.
Sandra

1

Tôi không phải là một chuyên gia bảo mật Tôi nghiêm khắc về bảo mật. Câu hỏi của bạn chính xác đạt đến cốt lõi của bảo mật CNTT: niềm tin. Như tôi thấy, người ta không bao giờ nên cho rằng Bob có thể tin tưởng được. Chắc chắn, Bob có thể là một chàng trai thực sự tốt và đáng tin cậy. Anh ấy làm việc tại công ty của bạn hơn 20 năm. Tuy nhiên, người "Bob" hoàn toàn không liên quan đến cơ sở hạ tầng CNTT của bạn.

Bob sử dụng 'rơle' tùy ý cho phép truy cập. Rơle có thể là bất cứ thứ gì: mật khẩu, chứng chỉ, mã thông báo phần cứng, quét mống mắt, DNA. Chúng là các khóa cho phép truy cập vào hệ thống của bạn. Nếu câu hỏi của bạn là về việc xác minh danh tính của người đang sử dụng chìa khóa, câu trả lời trung thực duy nhất có lẽ là bạn sẽ phải ở trong cùng một phòng. Trong tất cả các trường hợp khác, tôi nghĩ rằng bạn không được đảm bảo với bản thân mình rằng Bob thực sự là Bob và hiện tại không bị giữ tại điểm súng trong khi có được quyền truy cập của anh ta. Vì vậy, trong kế hoạch thiết kế cơ sở hạ tầng CNTT của bạn, điều hợp lý là không đề cập đến "Bob": một thực thể có được quyền truy cập vào trang web của bạn.

Bởi vì bạn chỉ có thể thực sự biết rằng 'một thực thể' đã có được quyền truy cập bằng một khóa mà bạn đã bỏ qua trong quá khứ, quan điểm đúng đắn có lẽ là để giới hạn số lượng cửa mà khóa có thể mở. Càng nhiều chìa khóa bạn đi ra càng ít cửa họ mở.

OpenVPN cũng có một tùy chọn chỉ cho phép một kết nối đồng thời trên mỗi khóa. Sau đó, nếu Alice đăng nhập bằng khóa của Bob trong khi Bob đã ở trong, Alice sẽ bị từ chối truy cập. Thật không may, điều này cũng có nghĩa là Bob không thể đăng nhập khi Alice đăng nhập bằng khóa của Bob. Vì vậy, bạn nên định cấu hình hệ thống của mình để thông báo cho bạn về các lần thử đăng nhập đồng thời từ nhiều IP nguồn. Và khởi động cả hai khi một số vi phạm xảy ra để Bob sẽ phải quay số để được giúp đỡ.

Vấn đề là: đừng tự đảm bảo về những điều bạn không thể chắc chắn và ghi nhớ điều này khi thiết kế kế hoạch bảo mật của bạn. Giả sử luôn có một người thông minh hơn ngoài kia, đi trước bạn, người không thể chờ đợi để chứng minh bạn sai ... chỉ là 'vì sự thất thường'. :-)

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.