systemd에 잘못된(정적, 낮은 엔트로피) 무작위 시드가 있으면 어떻게 되나요?

systemd에 잘못된(정적, 낮은 엔트로피) 무작위 시드가 있으면 어떻게 되나요?

임베디드 시스템에서는 읽기 전용 파일 시스템이 일반적입니다. 읽기 전용을 의미합니다/var/lib/systemd/random-seed 다시 시작한 후 업데이트할 수 없습니다, 그리고어쩌면 클론일지도다른 장치의 무작위 시드입니다.

이것이 상당한 보안이나 다른 영향을 미칠까요? 그렇다면 어떻게 완화해야 할까요?

아마도:

  • 각 장치에 대해 새로운 무작위 시드를 생성하면 부분적인 완화가 될까요? 다시 시작한 후에도 여전히 업데이트할 수 없습니다.
  • tmpfs 시작 초기에 임의의 시드 파일을 설정하기 위해 많은 노력을 기울이시겠습니까? 무엇을 해야할지 모르겠어요
  • 문제를 무시하시겠습니까?

답변1

나쁜 엔트로피는 특정 클래스의 내장형 장치에서 흔히 발생하는 문제입니다. 이는 심각한 보안 위험입니다. 안타깝게도 모든 장치에서 작동하는 단일 솔루션은 없습니다.

참고: 저는 전문 임베디드 장치 보안 설계자이지만 systemd 또는 Linux에 비해 너무 작은 장치를 사용하는 경우가 많습니다. 저는 systemd에 대해 잘 모릅니다.

엔트로피는 왜 필요한가요?

많은 보안이 암호화에 의존합니다. 대부분의 암호화는 다른 사람들이 모르는 것을 아는 데 의존합니다. 결정론적 프로세서를 실행하는 새로 설치된 시스템과 같이 상태가 완전히 알려진 장치가 있는 경우 모든 사람이 장치의 상태를 알고 있으므로 적이 모르는 것을 장치는 알 수 없습니다. 장치는 다른 사람이 모르는 것을 알기 시작하거나 다른 사람이 모르는 정보를 생성할 수 있는 방법이 있어야 합니다. 이것이 엔트로피입니다.

예를 들어, 웹사이트와 교환하는 데이터를 염탐할 수 없도록, 웹사이트와 교환하는 데이터를 위조할 수 없도록, WiFi 비밀번호를 염탐할 수 없도록 하려면 엔트로피가 필요합니다.

시스템에 엔트로피가 생기면,결정론적 무작위 생성기(즉, 소프트웨어 알고리즘)은 누구에게도 알려지지 않은 비밀 데이터를 무제한으로 생성할 수 있습니다. 그러나 어떤 결정론적 과정도 무에서 엔트로피를 생성할 수는 없습니다. 원칙적으로 결정론적 무작위 생성은 해결된 문제입니다(구현에 버그가 있을 수 있음).

2012년 연구에 따르면 인터넷에 연결된 장치 중 작지만 무시할 수 없는 부분은 열악한 무작위 생성기로 인해 안전하지 않은 것으로 나타났습니다.. 그들은 잘못된 무작위 생성기가 보이는 특정 방식만 테스트했다는 점을 명심하십시오. 이 연구에서는 잘못된 RNG가 문제를 일으킬 수 있는 다른 여러 가지 방법을 무시합니다. 그러나 반대로 일부 RNG 문제는 엔트로피 부족보다는 소프트웨어 버그로 인해 발생할 수 있습니다.

엔트로피는 어떻게 얻을 수 있나요?

가장 안정적인 솔루션은 전용 하드웨어 구성 요소를 보유하는 것입니다.하드웨어 난수 생성기(HRNG)1. 전부는 아니지만 대부분의 최신 PC 및 스마트폰 프로세서에는 하나가 있고 일부 임베디드 보드에는 하나가 있지만(내가 아는 한 모든 Raspberry Pi 모델에는 하나가 있습니다) 가정용 라우터와 같은 저가형 장치에서는 사용할 수 없습니다. 덜 일반적입니다. 장치에 HRNG가 있더라도 Linux에 해당 드라이버가 항상 있는 것은 아닙니다.

특수 하드웨어 구성 요소가 없으면 예측할 수 없는 이벤트로 인해 엔트로피가 생성될 수 있습니다. 문제는 예측할 수 없는 이벤트가 정량화하기 어렵고 임베디드 장치에서는 드물다는 것입니다. 예를 들어, 회전하는 하드 드라이브의 정확한 응답 시간에는 예측할 수 없는 부분이 있지만 일반적으로 내장형 장치에는 하드 드라이브가 걸쳐 있지 않습니다. 고속을 위해 설계된 복잡한 프로세서는 종종 예측할 수 없는 클럭을 갖습니다.지터, 그러나 저렴하거나 저전력 장치에는 지터가 많지 않습니다. 사용자 이벤트(예: 키 입력)의 타이밍으로 인해 일부 예측 불가능성이 발생하지만 내장형 장치에는 실제 사용자가 없는 경우가 많습니다. 카메라 센서나 마이크와 같은 일부 장치는 적어도 적절한 환경 조건이 주어지면 소음으로부터 엔트로피를 생성하는 데 능숙하지만 적합한 센서가 없는 장치는 많지 않습니다.

엔트로피를 생성할 수 없는 장치에 엔트로피를 제공하는 또 다른 방법은 제조 공정에 엔트로피를 주입하는 것입니다. 조립 라인에서 HRNG를 실행하고 무작위 데이터가 포함된 다른 파일을 각 장치에 주입합니다. 그런 다음 장치가 부팅될 때마다 이 무작위 데이터를 업데이트해야 합니다. 이 무작위 데이터는 귀하가 요청한 무작위 시드입니다.

모든 Linux 시스템에는 일반적으로 임의의 시드가 있습니다. 이는 다른 엔트로피 소스가 없는 장치에서는 절대적으로 필요하며, 다른 엔트로피 소스가 있는 장치에서도 괜찮습니다.

무작위 시드는 다른 장치와 공유되어서는 안 되며 장치 재부팅 시 반복되어서도 안 됩니다. 작동 방식은 시드가 제조 과정에서 주입되거나 장치 설치 중에 엔트로피에서 생성된 다음 장치가 부팅될 때마다 새로운 시드를 계산하고 저장하는 것입니다.

내 장치가 엔트로피 없이 설치된 경우 어떻게 해야 합니까?

Linux 시스템에 대한 명령줄 액세스 권한이 있는 경우 다음을 작성하여 액세스할 수 있습니다 /dev/urandom. 예를 들어 PC에서 장치로 SSH 연결이 있는 경우:

head -c 99 /dev/urandom | ssh mydevice 'cat >/dev/urandom'

부팅 문제가 있습니다. 장치에 엔트로피가 없으면 SSH 호스트 키를 안전하게 생성할 수 없으며 네트워크 공격자의 재생 공격에도 취약합니다. 따라서 장치가 신뢰할 수 없는 연결에 노출되기 전에 이 작업을 수행해야 합니다. 낮은 엔트로피로 생성된 키가 있는 경우 충분한 엔트로피를 사용할 수 있게 되면 다시 생성하세요.

추가 엔트로피를 생성한 후에는 저장소의 무작위 시드를 업데이트해야 합니다. 나생각하다서비스를 다시 시작하면 systemd-random-seed이 작업을 수행 할 수 있지만 확실하지 않으며 systemd에 대한 설명서가 불분명합니다.

내 장치에 영구 무작위 시드가 없으면 어떻게 해야 합니까?

장치에 HRNG가 있으면 문제가 없습니다. 그렇지 않으면 문제가 생길 것입니다.

장치에 비전용 주변 장치로부터 엔트로피를 수집할 수 있는 적절한 방법이 있다면 아마도 괜찮을 것입니다. 문제는 측정이 어렵다는 것이다.

/var/lib/systemd/random-seed지속적으로 저장해야 합니다. 그렇지 않으면 목적이 무산됩니다. tmpfs에 임의의 시드를 "저장"하는 것은 의미가 없습니다.

많은 임베디드 장치에는 소량의 NVRAM이 있습니다. 최대 쓰기 횟수가 허용하는 경우 부팅할 때마다 무작위 시드를 저장하는 것이 이 NVRAM을 잘 활용하는 것입니다. 이를 위해 systemd를 구성하는 방법을 모르겠습니다.

장치가 물리적으로 안전한 환경의 유선 네트워크에 연결된 경우 선택적으로 동일한 물리적 위치에 있는 신뢰할 수 있는 컴퓨터에서 엔트로피를 검색할 수 있습니다.

장치에 고유하지만 부팅할 때마다 다시 쓸 수 없는 비밀이 있는 경우 이 비밀을 부팅 시 시간과 결합할 수 있습니다. 하지만 참고하세요이것이 최후의 수단이다.

{ date +%s; cat /path/to/static/seed; } | sha256sum >/dev/urandom

그러면 허용 가능한 씨앗이 생산됩니다.날짜가 반복되지 않는 한. 그러나 장치의 전원이 꺼지고 시간을 추적할 수 없는 경우, 즉 2000년 1월 1일 00:00:00이라고 생각하여 "12시 플래시"를 재부팅하면 동일한 오류가 계속해서 발생합니다. 이를 통해 장치를 웹 기반 네트워크에 개방할 수 있습니다. 장치의 성능에 따라 공격이 다소 쉬울 수 있습니다.

1 면책 조항: 고용주가 이러한 장치를 제조하지는 않지만 더 많은 내장 장치에 HRNG가 장착되면 간접적으로 이익이 될 것입니다. 하지만 내 고용주의 주요 사업이 사람들의 공격 복구를 지원하여 돈을 버는 컨설팅 회사라면 개인적으로 여전히 HRNG를 추천할 것입니다.

답변2

소홀히 하다.

무작위 시드는 시스템에서 일반적일 수 있지만 "무작위성"을 생성하는 유일한 입력은 아닙니다.

동일한 시드는 의사 난수 생성기가 동일한 값으로 의사 난수 시퀀스를 시작한다는 것을 의미합니다.

시간이 지남에 따라 시스템 작동, 시간 등에서 데이터가 추출되어 의사 난수 생성기에 공급됩니다. 의사 난수 생성에 대한 이러한 입력은 시스템마다 다르므로 의사 난수 시퀀스는 빠르게 분기됩니다.

의사 난수 생성은 수학/컴퓨터 과학 연구의 하위 분야입니다.

관련 정보