Làm thế nào xấu là có nhiều thiết bị có cùng khóa máy chủ SSH?


21

Tôi đang làm việc trên một thiết bị nhúng chạy FreeBSD và SSH.

Như bạn đã biết, sshd thích tạo ngẫu nhiên một bộ khóa máy chủ khi lần đầu tiên khởi động. Vấn đề là chúng tôi sẽ vận chuyển sản phẩm với hệ thống tập tin thẻ sd chỉ đọc (không thể thương lượng).

Hai lựa chọn của tôi khi tôi thấy chúng là:

  • Gửi cùng khóa máy chủ sshd trên tất cả các thiết bị
  • Gắn kết hệ thống tệp bộ nhớ và tạo các khóa máy chủ trên mỗi lần khởi động (chậm ...)

Đây có phải là một vấn đề bảo mật lớn khi gửi cùng một khóa máy chủ trên tất cả các thiết bị không? Những mục này sẽ không được trực tiếp trên internet. Thỉnh thoảng sẽ có nhiều thiết bị thuộc sở hữu của cùng một người và trên cùng một mạng.

Hầu hết thời gian thiết bị sẽ không được kết nối với internet.

Đăng nhập bằng SSH không phải là một phần của hoạt động bình thường. Nó chủ yếu là để thuận tiện cho các lập trình viên và kỹ thuật viên. Khách hàng sẽ không đăng nhập vào thiết bị bằng SSH.

Sự phân nhánh của việc sử dụng cùng một khóa máy chủ trên nhiều thiết bị phần cứng là gì?

PS ai đó có thể vui lòng tạo một thẻ internet-of-thing?

EDIT : Tôi đang nói về việc cài đặt cùng một khóa riêng trên máy chủ trên tất cả các máy chủ (thiết bị). Theo như khóa công khai / khóa riêng của người dùng, hiện tại không có kế hoạch sử dụng khóa đăng nhập dựa trên khóa - đó sẽ là mật khẩu đăng nhập. Một lần nữa, cùng một mật khẩu trên tất cả các máy chủ (thiết bị).

Tôi biết rằng đây có lẽ là một ý tưởng tồi. Tôi muốn biết tại sao chính xác đó là một ý tưởng tồi mặc dù vậy tôi có thể hiểu được sự đánh đổi.


Nếu bạn có nghĩa là các phím máy chủ, sau đó người dùng có nhiều hơn một thiết bị của bạn có thể nhận được cảnh báo tùy thuộc vào cấu hình ssh khách hàng của họ. mối quan tâm lớn hơn sẽ là xung quanh các khóa xác thực ssh thực tế. Hy vọng rằng bạn không cài đặt bất kỳ khóa riêng nào và hy vọng các khóa công khai của bạn bị hạn chế ở các mạng nguồn cụ thể và hy vọng các khóa riêng do công nghệ của bạn sở hữu có một mật khẩu mạnh đối với chúng và hy vọng các khóa đó không bao giờ bị kiểm tra nhầm. IoT đang nhận được một tên thực sự xấu vì những điều đó. Không nói bạn sẽ, chỉ nói rằng đó là một vấn đề lớn.
Aaron

Tôi đang nói về việc cài đặt cùng một khóa riêng trên máy chủ, nếu đó là ý bạn.
NXT

2
Sử dụng cùng tên người dùng / mật khẩu trên tất cả các thiết bị là một ý tưởng rất tồi. Đó là những cách dễ dàng hơn so với khóa riêng được sử dụng để xác thực khóa chung. Ngay cả khi những kẻ lệch lạc này không được cho là kết nối trực tiếp với internet, thì vẫn có người sẽ làm điều đó. Và nếu "không trực tiếp kết nối" có nghĩa là NAT, họ đủ kết nối ...
Tero Kilkanen

7
Chia sẻ những phương tiện quan trọng SSH rằng ai đó có thể truy cập vào khóa riêng trên một thiết bị có thể mạo danh tất cả các thiết bị.
dùng253751

3
Trong khi đây là một câu hỏi thú vị, tôi không thấy bất cứ điều gì về nó có liên quan đến quản trị hệ thống, và do đó off-topic cho Server Fault. Bạn đang hỏi về việc thiết kế giao diện gỡ lỗi / chẩn đoán cho thiết bị nhúng mà bạn đang vận chuyển và không phải là giao diện có liên quan đến sysadins. Câu hỏi này có thể được chuyển sang An toàn thông tin .
200_success

Câu trả lời:


27

Thay vì lưu trữ dữ liệu dành riêng cho máy chủ như khóa máy chủ ssh trên thẻ SD hoặc phương tiện chỉ đọc khác, bạn có thể lưu trữ dữ liệu này trong NVRAM, đây là những gì dành cho hệ thống nhúng. Bạn sẽ cần thực hiện một số tập lệnh tùy chỉnh để lưu trữ và truy xuất các khóa khi khởi động, nhưng các tập lệnh sẽ giống hệt nhau cho mọi thiết bị.


12

Tác động của việc vận chuyển cùng một cặp khóa với tất cả các thiết bị của bạn có liên quan trực tiếp đến bảo mật của các máy khách kết nối với chúng, vì điều đó có nghĩa là không có cách nào (từ máy khách SSH) để nhận dạng duy nhất thiết bị mà nó có thể kết nối. Nếu cặp khóa của bạn bị rò rỉ, nó có thể được sử dụng cho các cuộc tấn công MITM.

Mặt khác, việc tạo lại các phím trên mỗi lần khởi động, cũng sẽ kích hoạt cảnh báo cho khách hàng.

Để tham khảo, từ man ssh(1):

sshtự động duy trì và kiểm tra cơ sở dữ liệu chứa nhận dạng cho tất cả các máy chủ mà nó đã từng được sử dụng. Khóa máy chủ được lưu trữ trong ~/.ssh/known_hoststhư mục nhà của người dùng. Ngoài ra, tệp /etc/ssh/ssh_known_hostsđược tự động kiểm tra các máy chủ đã biết. Bất kỳ máy chủ mới nào cũng được tự động thêm vào tệp của người dùng. Nếu nhận dạng của máy chủ lưu trữ thay đổi, sshcảnh báo về điều này và vô hiệu hóa xác thực mật khẩu để ngăn chặn các cuộc tấn công giả mạo máy chủ hoặc trung gian, có thể được sử dụng để phá vỡ mã hóa. Các StrictHostKeyCheckingtùy chọn có thể được sử dụng để kiểm soát thông tin đăng nhập cho các máy có chìa khóa chủ không biết hoặc đã thay đổi.


2
Tôi không hiểu tại sao họ không thể tạo một lần (trên mỗi thiết bị, ở lần khởi động đầu tiên) sau đó không bao giờ tạo lại (trừ khi chúng bị xóa)?
djsmiley2k - CoW

Hoàn toàn có thể làm được. Nhưng OP nói rằng anh ấy / cô ấy muốn: 'Gắn hệ thống tệp bộ nhớ và tạo các khóa máy chủ trên mỗi lần khởi động'. Vì vậy, câu trả lời của tôi giả định rằng.
dawud

ah yup tôi đã bỏ lỡ điều đó khi tôi đọc nó lần đầu tiên.
djsmiley2k - CoW

5

Có vẻ như trong tùy chọn đầu tiên, các khóa SSH sẽ có sẵn trên thẻ SD. Vì vậy, bất kỳ người dùng có thể lấy thẻ và đọc chúng ra. Vì vậy, về cơ bản các khóa riêng của bạn đã trở thành (chủ yếu) công khai.

Điều này sẽ cho phép các cuộc tấn công trung gian, như sau:

  1. Người dùng thiết lập máy chủ SSH với các khóa riêng thu được từ thiết bị của bạn và cung cấp địa chỉ IP đó cho kỹ thuật viên của bạn.
  2. Kỹ thuật viên của bạn nhập mật khẩu gốc qua kết nối SSH.
  3. Người dùng hiện biết mật khẩu gốc hợp lệ cho tất cả các thiết bị của bạn.

Tuy nhiên, bạn không nên sử dụng mật khẩu gốc ở nơi đầu tiên, thay vào đó hãy sử dụng khóa ssh để xác thực. Sau đó, tác động của các khóa máy chủ được chia sẻ là khá nhỏ nếu bạn chỉ đăng nhập từ mạng LAN.

SSH cũng cung cấp bảo mật về phía trước, vì vậy kẻ tấn công phải có khả năng thiết lập một máy chủ giả để hưởng lợi từ các khóa; thụ động đánh hơi lưu lượng sẽ không cho phép giải mã nó.


Thật buồn cười khi những định kiến ​​của chúng ta có thể làm chúng ta mù quáng (tôi). Thẻ SD nằm bên trong thiết bị phía sau bảng điều khiển và bên dưới bảng mạch, do đó, không bao giờ xảy ra với tôi rằng ai đó sẽ rút nó ra. Tuy nhiên, bạn là chính xác, nó hoàn toàn có thể truy cập được cho bất cứ ai với một tuốc nơ vít. Cảm ơn đã nhắc nhở để xem xét bảo mật vật lý của hệ thống.
NXT

WRT # 2, mật khẩu gốc không nên được gửi qua kết nối SSH. Nó nên được nhập vào máy khách đầu cuối và được sử dụng cho nửa cục bộ của giao thức xác thực chứng minh quyền sở hữu bí mật mà không truyền bí mật ("bằng chứng kiến ​​thức"). Ngay cả các hệ thống hàng thập kỷ đã biết gửi một mật khẩu băm và không phải chính mật khẩu. Bao gồm một nonce trong giao thức thử thách / phản hồi và kẻ tấn công không biết mật khẩu ban đầu cũng như bất kỳ mã thông báo nào có thể được sử dụng ở vị trí của nó.
Ben Voigt

1
@BenVoigt Tôi nghĩ rằng hầu hết các hệ thống unix đều truyền mật khẩu đến máy chủ. Tệp bóng chỉ lưu trữ một hàm băm, nhưng bạn không muốn tin tưởng vào hàm băm do khách hàng tạo ra - bởi vì nếu không thì bất kỳ ai cũng có thể đăng nhập bằng hàm băm bị đánh cắp mà không đảo ngược nó. Vì vậy, máy chủ phải biết mật khẩu thực tế để chạy bcrypt hoặc tương tự trên đó.
jpa

2

Tôi đọc điều này trong kinh dị! Tôi đã thực hiện nhiều máy trong cùng một cụm với cùng khóa máy chủ ssh sẽ không bao giờ dám làm điều này. Không trong mọi trường hợp cho phép các máy có bộ quản trị viên khác nhau chia sẻ khóa máy chủ ssh. Đó là cách điên rồ và la hét kinh hoàng khi bạn bị đăng vì sự thiếu an toàn của bạn.

Kìa tôi nói cho bạn biết sự thật, anh ta thỏa hiệp một thiết bị thỏa hiệp tất cả chúng. Sau khi có được một, mong muốn những người xấu sẽ nhảy từ người này sang người khác theo ý muốn và an ninh quay trở lại như thể đó là một tờ giấy mỏng.


1
Bạn có thể giải thích về cách kẻ tấn công sẽ sử dụng khóa riêng của máy chủ bị đánh cắp để thỏa hiệp với các thiết bị khác không?
jpa

@jpa: Đối với khóa máy chủ, bằng cách chặn và đánh cắp mật khẩu, v.v. Ngoài ra, thiết lập này dường như đề xuất thực hiện điều tương tự với khóa người dùng.
joshudson

1

Vì bạn đề cập rằng quyền truy cập SSH không được sử dụng bởi người dùng / khách hàng cuối, bạn có thể muốn tắt quyền truy cập SSH theo mặc định và chỉ bật tạm thời khi thiết bị được đưa vào chế độ "gỡ lỗi".

Sau đó, bạn có thể gửi tất cả các thiết bị có cùng khóa, giả sử rằng bạn đã bảo vệ chế độ "gỡ lỗi" để nó không thể được kích hoạt từ xa bởi ai đó đang cố gắng hack thiết bị.

Hoặc bạn có một khóa mới được tạo khi thiết bị chuyển sang chế độ "gỡ lỗi" - vì vậy bạn không phải lãng phí thời gian khởi động để tạo khóa mỗi khi thiết bị được bật nguồn.


Tôi thích ý tưởng này.
NXT

1

Đây là một kịch bản tấn công mẫu dựa trên các ràng buộc bạn có:

Nếu thiết bị của bạn là, ví dụ như Raspberry Pi. Nếu tôi đi lên và lấy thẻ SD từ một, tôi có thể dán thẻ SD vào máy tính của mình, tìm khóa sshd và sao chép nó vào mọi nơi tôi muốn. Có lẽ tôi lấy pi mâm xôi của riêng tôi và thẻ ethernet USB. Bây giờ tôi có thể dán nó ở giữa một thiết bị mục tiêu và bất cứ nơi nào chúng đi và theo dõi các kết nối ssh. Khi tôi thấy thiết bị đích đang cố gắng tạo kết nối ssh, tôi sẽ làm điều này:

(target) <---> (my evil sshd <--> decrypted traffic <--> ssh) <---> (real server)
                                       |
                                       V
                                    log file

Ô .. cái đó là gì thế? Mật khẩu của bạn là "Tôi thích mèo"? Chàng trai, đây là một email thú vị mà bạn đã gửi cho vợ mình. Tôi cá là sẽ còn thú vị hơn nữa nếu cô ấy đọc email này mà bạn gửi cho vợ hàng xóm bên cạnh.

Các khả năng là vô tận . Và mục tiêu sẽ không bao giờ biết, bởi vì khóa sshd giống hệt với khóa được tìm thấy trên máy chủ thực. Tùy thuộc vào bảo mật vật lý của các cơ sở đang nhận thiết bị của bạn, điều này có thể rất nhỏ. Đừng làm điều này.

Thay vào đó, hãy làm những gì bạn đã đề xuất nhưng sửa nó . Trước khi bạn viết hình ảnh của bạn chạy một cái gì đó như thế này:

ssh-keygen -f some-new-server
cp some-new-server /path/to/the/mounted/image/sshd/key
cp some-new-server.pub /path/to/the/mounted/image/sshd/key.pub

Và bây giờ mỗi máy chủ có một khóa mới . Bởi vì bạn thực sự, thực sự không muốn phân phối các bản sao của khóa. Ý tôi là thành thật mà nói, nó ít nhất cũng tệ như chụp ảnh chìa khóa nhà của bạn và tải chúng lên Internet bằng địa chỉ nhà của bạn.


1
Nếu ai đó có quyền truy cập vật lý vào phần cứng của bạn và bạn không thể mã hóa dữ liệu khi nghỉ thì tất cả các cược đã bị tắt.
user9517 hỗ trợ GoFundMonica
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.