동일한 SSH 서버 키를 가진 여러 장치를 갖는 것이 얼마나 나쁜가?


21

FreeBSD와 SSH를 실행하는 임베디드 장치에서 작업하고 있습니다.

아시다시피, sshd는 처음 부팅 할 때 서버 키 세트를 임의로 생성하는 것을 좋아합니다. 문제는 읽기 전용 sd-card 파일 시스템 (협상 불가능)으로 제품을 배송한다는 것입니다.

내가 보는 두 가지 옵션은 다음과 같습니다.

  • 모든 장치에 동일한 sshd 서버 키를 제공하십시오
  • 메모리 파일 시스템을 마운트하고 매번 부팅 할 때마다 서버 키를 생성하십시오 (느리게 ...).

모든 장치에 동일한 서버 키를 제공하는 것이 주요 보안 문제입니까? 이러한 항목은 인터넷에 직접 있지 않습니다. 같은 사람과 같은 네트워크에서 여러 장치를 소유하는 경우가 있습니다.

대부분의 경우 장치가 인터넷에 연결되지 않습니다.

SSH로 로그인하는 것은 정상적인 작동의 일부가 아닙니다. 주로 프로그래머와 기술자의 편의를위한 것입니다. 고객은 SSH를 사용하여 장치에 로그인하지 않습니다.

여러 하드웨어 장치에서 동일한 서버 키를 사용하면 어떤 결과가 있습니까?

추신 : 누군가가 사물 인터넷 태그를 만들 수 있습니까?

편집 : 나는 모든 서버 (장치)에 동일한 호스트 개인 키를 설치하는 것에 대해 이야기하고 있습니다. 사용자 공개 / 개인 키의 경우 현재 키 기반 로그인을 사용할 계획이 없습니다. 비밀번호 로그인입니다. 모든 서버 (장치)에서 동일한 암호를 다시 사용하십시오.

나는 이것이 아마도 나쁜 생각이라는 것을 안다. 나는 왜 그것이 왜 나쁜 생각인지 정확하게 알고 싶습니다. 그래서 나는 장단점을 이해할 수 있습니다.


호스트 키를 의미하는 경우 장치가 둘 이상인 사용자는 ssh 클라이언트 구성에 따라 경고를받을 수 있습니다. 더 큰 문제는 실제 ssh 인증 키에 관한 것입니다. 바라건대 개인 키를 설치하지 않고 공개 키가 특정 소스 네트워크로 제한되어 있기를 바랍니다. 기술자가 소유 한 개인 키에 강력한 암호가 있고 희망적으로 해당 키가 실수로 리포지토리에 입력되지 않기를 바랍니다. 사물 인터넷 (IoT)은 그 때문에 정말 나쁜 이름을 얻고 있습니다. 당신이 할 말이 아니라 큰 문제라고 말하는 것입니다.
Aaron

모든 서버에 동일한 호스트 개인 키를 설치하는 것에 대해 이야기하고 있습니다.
NXT

2
모든 장치에서 동일한 사용자 이름 / 암호를 사용하는 것은 매우 나쁜 생각입니다. 그것들은 공개 키 인증에 사용되는 개인 키보다 무차별 강제입니다. 이러한 장치가 인터넷에 직접 연결되어 있지 않아도 누군가는 그렇게 할 것입니다. 그리고 수단 NAT, 그들은 ... 연결 충분 "직접 연결되지 않은"경우
테로 Kilkanen

7
SSH 키를 공유한다는 것은 하나의 장치에서 개인 키에 액세스 할 수있는 사람이 이러한 모든 장치를 가장 할 수 있음을 의미합니다.
user253751

3
이것은 흥미로운 질문이지만 시스템 관리와 ​​관련하여 서버 결함에 대한 주제가 아닙니다. sysadmins와 관련이있는 인터페이스가 아니라 배송중인 내장 장치에 대한 디버깅 / 진단 인터페이스를 설계하려고합니다. 이 질문은 정보 보안 으로 마이그레이션 될 수 있습니다 .
200_success

답변:


27

SD 카드 또는 기타 읽기 전용 미디어에 ssh 호스트 키와 같은 호스트 별 데이터를 저장하는 대신 내장 시스템의 NVRAM에 저장할 수 있습니다. 부팅시 키를 저장하고 검색하려면 일부 사용자 지정 스크립팅을 수행해야하지만 스크립트는 모든 장치에서 정확히 동일합니다.


12

동일한 키 페어를 모든 장치와 함께 배송하면 그에 연결된 클라이언트의 보안과 직접 ​​관련이 있습니다. 이는 SSH 클라이언트에서 연결중인 장치를 고유하게 식별 할 수있는 방법이 없기 때문입니다. 키 페어가 유출되면 MITM 공격에 사용될 수 있습니다.

반면에, 부팅 할 때마다 키를 다시 생성하면 클라이언트에서 경고가 트리거됩니다.

참고로 man ssh(1):

ssh사용 된 모든 호스트에 대한 식별 정보가 포함 된 데이터베이스를 자동으로 유지 관리하고 검사합니다. 호스트 키는 ~/.ssh/known_hosts사용자의 홈 디렉토리에 저장됩니다 . 또한 파일 /etc/ssh/ssh_known_hosts은 알려진 호스트를 자동으로 확인합니다. 모든 새 호스트가 자동으로 사용자 파일에 추가됩니다. 호스트 식별이 변경되면 이에 ssh대해 경고하고 암호 인증을 비활성화하여 서버 스푸핑 또는 MITM (Man-in-the-Middle) 공격을 방지합니다. 그렇지 않으면 암호화를 우회하는 데 사용될 수 있습니다. 이 StrictHostKeyChecking옵션을 사용하여 호스트 키를 알 수 없거나 변경된 시스템에 대한 로그인을 제어 할 수 있습니다.


2
왜 각 장치에서 처음 부팅 할 때 한 번만 생성 할 수없고 다시 제거하지 않는 한 다시 생성 할 수없는 이유를 이해하지 못합니까?
djsmiley2k-CoW

완벽하게 할 수 있습니다. 그러나 OP는 '메모리 파일 시스템을 마운트하고 각 부팅마다 서버 키를 생성합니다'라고 말합니다. 그래서 내 대답은 그것을 가정합니다.
dawud

아 p 처음 읽을 때보고 싶었습니다.
djsmiley2k-CoW

5

첫 번째 옵션에서 들리는 것처럼 SSH 키는 SD 카드에서 사용할 수 있습니다. 따라서 모든 사용자가 카드를 꺼내서 읽을 수 있습니다. 따라서 기본적으로 개인 키는 (대부분) 공개되었습니다.

이를 통해 다음과 같은 중간자 공격이 가능합니다.

  1. 사용자는 장치에서 얻은 개인 키를 사용하여 SSH 서버를 설정하고 해당 IP 주소를 기술자에게 제공합니다.
  2. 기술자는 SSH 연결을 통해 루트 비밀번호를 입력합니다.
  3. 이제 사용자는 모든 장치에 유효한 루트 암호를 알고 있습니다.

그러나 먼저 루트 암호를 사용해서는 안됩니다. 대신 ssh 키를 사용하여 인증하십시오. LAN으로 만 로그온 하면 공유 서버 키의 영향이 매우 작습니다 .

SSH는 또한 전 방향 보안을 제공하므로 공격자는 키를 활용하기 위해 잘못된 서버를 설정할 수 있어야합니다. 수동으로 트래픽을 스니핑하면 트래픽을 해독 할 수 없습니다.


우리의 선입견이 어떻게 우리를 눈 멀게 할 수 있는지는 재미있다. SD-Card는 장치 뒤의 패널 뒤와 회로 보드 아래에 있으므로 누군가 그것을 뽑아 낼 수 없었습니다. 그러나, 당신은 정확합니다, 그것은 드라이버를 가진 사람이라면 누구나 접근 할 수 있습니다. 시스템의 물리적 보안을 고려해 주셔서 감사합니다.
NXT

WRT # 2, 루트 암호는 SSH 연결을 통해 보내지 않아야합니다. 터미널 클라이언트에 입력해야하며 비밀을 전송하지 않고 비밀을 소유하고 있음을 증명하는 인증 프로토콜의 로컬 절반에 사용됩니다 ( "지식 증명"). 수십 년 전의 시스템조차도 암호 자체가 아닌 암호 해시를 보내는 것으로 알고있었습니다. 챌린지 / 응답 프로토콜에 nonce를 포함 시키면 공격자는 원래 암호 나 그 자리에서 사용할 수있는 토큰을 모릅니다.
Ben Voigt

1
@ BenVoigt 대부분의 유닉스 시스템은 서버로 암호를 전송한다고 생각합니다. 섀도 파일은 해시 만 저장하지만 클라이언트가 생성 한 해시를 신뢰하지 않으려 고합니다. 그렇지 않으면 누군가가 도난당한 해시로 되돌릴 수 없기 때문에 해시로 로그인 할 수 있기 때문입니다. 따라서 서버는 bcrypt 또는 이와 유사한 것을 실행하기 위해 실제 비밀번호를 알아야합니다.
jpa

2

나는 이것을 공포로 읽었다! 동일한 ssh 호스트 키를 사용하여 동일한 클러스터에서 여러 시스템을 수행 한 사람은이 작업을 감히 수행하지 않습니다. 어떤 상황에서도 다른 관리자 세트를 가진 머신이 ssh 호스트 키를 공유하도록 허용하지 마십시오. 당신이 당신의 보안 부족으로 게시 될 때 그 방법은 광기와 비명 공포에 놓여 있습니다.

하나의 장치를 손상시키는 사람은 모든 장치를 손상시키는 진실을 말하겠습니다. 일단 획득하면, 나쁜 사람들이 원하는대로 서로 이동하고 보안은 얇은 종이처럼 롤백됩니다.


1
공격자가 도난당한 서버 개인 키를 사용하여 다른 장치를 손상시키는 방법에 대해 자세히 설명해 주시겠습니까?
jpa

@jpa : 호스트 키의 경우, 암호를 가로 채거나 훔치는 등의 작업을 수행합니다. 또한이 설정은 사용자 키와 동일한 작업을 제안하는 것 같습니다.
joshudson

1

최종 사용자 / 고객이 SSH 액세스를 사용하지 않는다고 언급 했으므로 기본적으로 SSH 액세스를 끄고 장치를 "디버그"모드로 전환 한 경우에만 일시적으로 활성화 할 수 있습니다.

그런 다음 "디버그"모드를 보호하여 장치를 해킹하려는 누군가가 원격으로 트리거 할 수 없다고 가정하면 모든 장치를 동일한 키와 함께 제공 할 수 있습니다.

또는 장치가 "디버그"모드로 전환 될 때 새 키가 생성되므로 장치 전원을 켤 때마다 키를 생성하는 부팅 시간을 낭비하지 않아도됩니다.


나는이 아이디어를 좋아한다.
NXT

1

보유한 제약 조건을 기반으로 한 샘플 공격 시나리오는 다음과 같습니다.

당신의 장치가 있다면, 예를 들어 라즈베리 파이라고 말하십시오. SD 카드를 걸어서 잡아 당기면 SD 카드를 내 컴퓨터에 꽂고 sshd 키를 찾아 원하는 곳에 복사 할 수 있습니다. 어쩌면 나는 내 자신의 라즈베리 파이와 USB 이더넷 카드를 잡을 수 있습니다. 이제 대상 장치와 장치가 어디를 가든지 ssh 연결을 모니터링 할 수 있습니다. 대상 장치가 ssh 연결을 시도하는 것을 볼 때 다음과 같이하십시오.

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

오, 그게 뭐야? 귀하의 비밀번호는 "나는 고양이를 좋아합니다"입니까? 이봐, 이건 네가 부인에게 보낸 흥미로운 이메일이야 그녀가 네 이웃집 아내에게 보낸이 이메일을 읽는다면 훨씬 더 흥미로울 것이다.

가능성은 없습니다 . 그리고 sshd 키가 실제 서버에서 찾은 키와 동일하기 때문에 대상은 알 수 없습니다. 장치를 수신하는 시설의 물리적 보안에 따라 이는 매우 사소 할 수 있습니다 . 이러지 마

대신 이미 제안한 것을 수행하되 수정하십시오 . 이미지를 작성하기 전에 다음과 같이 실행하십시오.

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

이제 모든 서버에 새로운 키가 있습니다. 당신은 정말 때문에 정말 키의 복사본을 배포 할 싶지 않아요. 나는에있어 정직하게 말은 적어도 당신의 집 열쇠의 사진을 스냅과 집 주소와 인터넷에 업로드로 나쁜한다.


1
누군가가 귀하의 하드웨어에 물리적으로 액세스 할 수 있고 유휴 데이터를 암호화하지 못하면 모든 베팅이 해제됩니다.
user9517은
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.