스크립트에서 ssh에 사용되는 비밀번호를 저장하는 안전한 방법이 있습니까?


16

먼저 SSH에 키 인증을 사용해야한다는 것을 알고 있습니다. 설명 할 필요가 없습니다.

여기서 문제는 많은 서버가 있고 각 서버를 연결할 수있는 스크립트가 필요하다는 것입니다.

가능할 때마다 키 인증을 사용하지만 모든 서버에서 가능하지는 않습니다 (이를 제어 할 수는 없습니다). 따라서 로그인 또는 때로는 텔넷이있는 SSH.

그래서 일부의 경우 방금 암호를 db에 저장했으며 필요할 때 스크립트가 가져갑니다. 문제는 그렇게하는 것이 실제로 안전하지 않다는 것입니다. 좀 더 안전하게 만드는 방법이 있습니까?

그것을 저장하는 특정 방법처럼?


1
환경 변수. SO와 중복 : stackoverflow.com/a/4410137/2579527
Travis Stoll

4
@TravisStoll 환경 변수는 안전하지 않습니다.
Jenny D

DB에 비밀번호를 저장하는 설정이 안전하다고 생각합니다. keepass 파일과 같이 암호화 된 db로 만들 수 있습니다 (keepass db에 액세스하는 데 최소한 perl 모듈이 있다고 생각합니다).하지만 입력하지 않으려면 여전히 데이터베이스에 암호를 저장해야합니다 스크립트를 호출 할 때마다 어쩌면 조금 더 나은 IFF는 스크립트를 호출 할 때마다 마스터 비밀번호를 입력하는 것입니다.
Isaac

1
비밀번호 대신 SSH 인증 키를 사용하더라도 보안을 보장 할 수는 없습니다. 비밀번호 데이터베이스를 도용 할 수있는 사람은 누구나 개인 키를 도용 할 수 있습니다. 비밀번호 데이터베이스를 암호화하는 것처럼 개인 키를 암호화 할 수 있지만 스크립트가 키 (또는 비밀번호 데이터베이스)를 잠금 해제해야하므로 여전히 공격자에게 취약합니다. 키 대신 암호를 사용하면 암호를 도용 할 수있는 더 많은 방법이 열리기 때문에 취약점이 약간 높아지지만 암호 대신 키를 사용하는 것도 완벽한 보안은 아닙니다.
Johnny

1
"때로는 telnet"은 암호가 때로는 유선으로 명확하게 전송 될 것임을 암시하는 것 같습니다 ...?
Hagen von Eitzen

답변:


24

스크립트가 해당 서버 중 하나에 연결할 수있는 경우 스크립트에 액세스 할 수있는 (또는 스크립트가 실행되는 시스템에 대한 특권 액세스 권한이있는) 누구나 해당 서버에 연결할 수 있습니다.

경우 스크립트가 자율적으로 실행하는 데 필요한 모든 베팅은 꺼져 있습니다. 여기에 대한 대답은 아니요, 그러한 환경에서 암호를 저장하는 절대 안전한 방법은 아닙니다 . 절대 안전 하고 실용적인 방법은 없습니다 .

피할 수없는 것을 피하려고하는 대신, 심층 방어에 집중해야합니다 .

물론 암호를 적절히 보호해야합니다 . 이는 일반적으로 스크립트와 별도의 파일로 파일을 유지하고 제한적인 파일 시스템 권한을 구성하는 것을 의미 합니다 . 이것이 보안 관점에서이 정면에서 할 수있는 모든 것입니다.

다른 조치는 프로세스 에 불명확성 을 추가 할 수 있습니다 . 암호를 암호화하면 공격자가 암호 해독 키를 검색해야합니다. 일종의 운영 체제 보호 스토리지를 사용하면 일반적으로 키에 액세스 하는 다른 사용자 로부터 보호 됩니다 (따라서 공격 및 사용이 복잡하지 않은 파일 시스템 권한보다 이점이 없음). 이러한 조치는 공격 을 지연 시키지만 결정된 공격자에 대한 공격을 막지는 못할 것입니다.


이제 비밀번호를 잠시 공개로 취급 하겠습니다 . 피해를 완화하기 위해 무엇을 할 수 있습니까?

오래되고 테스트 된 솔루션은 해당 자격 증명으로 수행 할 수있는 작업을 제한하는 것입니다. UNIX 시스템에서이를 수행하는 좋은 방법은 스크립트에 별도의 사용자설정 하고 액세스 및 액세스 된 서버 모두에서 해당 사용자의 기능을 제한하는 것 입니다. SSH 수준 , 셸 수준 또는 SELinux와 같은 필수 액세스 제어 메커니즘을 사용하여 사용자 기능 제한 할 수 있습니다 .

고려해야 할 사항은 스크립트 논리를 서버로 옮기는 것 입니다. 그렇게하면 제어하기 쉬운 작은 인터페이스, 특히 ...

모니터 . 항상 서버에 대한 액세스를 모니터하십시오. 바람직하게는, 로그 인증 및 명령은 추가 전용 로그로 실행된다 . auditd예를 들어을 사용하여 스크립트 파일 변경 사항을 모니터링하는 것을 잊지 마십시오 .


물론, 이러한 메커니즘 중 다수는 서버에 대한 제어 권한이없는 경우 유용하지 않습니다. 질문에서 알 수 있듯이. 이 경우 서버를 관리하는 사람들과 연락 하여 스크립트와 잠재적 인 보안 위험에 대해 알려주십시오.


14

짧은 대답은 : 아니요.

긴 대답은 : 아니요, 완전히 안전한 방법은 없습니다. (여기에는 서버에서 다른 사람이 액세스 할 수있는 환경 변수가 포함됩니다.) 가장 가까운 것은 변수를 암호화 된 형식 (keepass, GPG 암호화 파일 등)으로 저장하는 것입니다. 그러나 어느 시점에서 스크립트가 암호를 사용할 수 있도록 암호를 해독해야하며이 시점에서 취약 해집니다.

다시 말해, 스크립트가 실행되는 서버, 네트워크 및 대상 서버 모두에서 심도있는 보안에 대해 긴밀히 검토해야합니다.


1
나는 이것이 확실한 NO인지 확실하지 않습니다. 그의 세션은 안전하다. 적절한 권한이 설정되어 파일 시스템이 안전 할 수 있습니다. 따라서 파일 시스템 (저장된 비밀번호)에서 내용을 가져 와서 stdin을 통해 ssh 명령으로 파이프 할 수 있으면 괜찮을까요? 위의 다른 의견에 대한 링크를 참조하십시오. 어떻게 생각해?
pgr

그가 stdin을 통해 파이프를 연결하면 취약점이 있습니다. 귀하의 제안으로 더 안전하지만 완전히 그렇게되지는 않습니다. 특히 일부 세션은 텔넷을 통해 이루어집니다.
Jenny D

0

두 번째 비밀번호로 db의 비밀번호를 암호화하고이 비밀번호를 별도의 세 번째 머신에 저장하고, db에서 비밀번호를 지정해야하는 스크립트가이 세 번째 머신을 먼저 연결하여 복호화 비밀번호를 얻는 시스템을 배치 할 수 있습니다. , 세 번째 컴퓨터에서 얻은 암호로 db의 암호를 해독하고 작동합니다.

물론 이것은 실제로 추가 보안을 추가하지는 않지만 충분한 권한을 가진 공격자는 세 번째 컴퓨터에서 암호를 요청할 수도 있습니다.

그러나 요점은 제 3자가 예를 들어 상사 나 보안 책임자 또는 제 3자가 제어하지 않는 서버를 제어하는 ​​제 3의 머신을 제어 할 수 있다는 것입니다.

이런 식으로 문제가 생겼을 때, 작업을 종료하고 사용자를 교체하는 사람을 믿지 않거나 스크립트가 컴퓨터에 대한 액세스를 중단하기를 원하는 경우 3 차 플러그를 뽑을 수 있습니다. 컴퓨터에서 더 이상 스크립트에 비밀번호에 액세스 할 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.