“AcceptEnv *”가 안전하지 않은 이유는 무엇입니까?


12

에는 ssh 클라이언트가 환경 변수를 보낼 수 /etc/ssh/sshd_config있는 옵션 AcceptEnv이 있습니다. 많은 수의 환경 변수를 보낼 수 있어야합니다. 이는 클라이언트와의 모든 연결에서 변경되므로 서버의 로그인 스크립트에 배치하는 것이 더 어려울 수 있습니다.

"AcceptEnv *"안전하지 않은 것을 읽었습니다 . 나는 거기에 놓으려고 설정된 모든 환경 변수 목록을 얻으려고 시도하기 전에 왜 이해하고 싶습니다.

왜 안전하지 않은 것으로 간주됩니까? 예를 들어 볼 수 있습니까?

답변:


11

환경 처리를 활성화하면 LD_PRELOAD와 같은 메커니즘을 사용하여 일부 구성에서 액세스 제한을 무시할 수 있습니다.

sshd_config 매뉴얼 페이지의 모든 버전에서이 내용을 언급하지는 않습니다. 환경 변수가 사전에 변경되고 특정 권한 프로세스가 이로 지정된 새 라이브러리로 실행되면 문제가 발생할 수 있습니다.

http://www.dankalia.com/tutor/01005/0100501004.htm을 보고 "LD_PRELOAD Exploit"을 검색 하십시오 . 페이지에 앵커 링크가 없습니다.

이 StackOverflow 질문 인 " LD_PRELOAD 트릭이란 무엇입니까? " 도 참조하십시오.

연결 후 환경 변수를 설정하는 것은 좋지만 AcceptEnv에서 설정 한대로 ssh 데몬이 해당 변수를 해석하면 나쁜 일이 발생할 수 있습니다.


1
로그인 후 변수를 수동으로 설정했을 때와 어떻게 다른가요?
Joseph Garvin

1
@JosephGarvin, 일부 시스템은 셸이 제한되어 있거나 "그들"이 할 수없는 단일 특정 명령 만 허용합니다 . 따라서 우려는 그러한 보안 조치를 우회 할 수있는 수단을 제공하는 것입니다.
Charles Duffy

0

환경 변수를 허용하지 마십시오 :

최근에 나온 Shellshock 익스플로잇 을 참조하십시오 . 환경 변수를 받아들이면 정말 불쾌한 익스플로잇이 시작됩니다.


1
당신은 두려움 IMO를 전파하고 있습니다. 걱정된다면 왜 SSH 액세스 권한이 있습니까? 그리고 환경 변수가 쉘이나 함수에 있으면 환경 변수를 설정하지 못하게 할 수 없습니다. 이 악용은 인증 된 쉘 액세스가 아닌 nginx와 같은 것을 통한 인증되지 않은 쉘 액세스에 관한 것입니다.
Jordon Bedwell

어쨌든 당신은 적어도 하나의 환경을 받아들입니다. 이름이 TERM 인 변수. PRINTER, EDITOR, PAGER 등과 같은 다른 변수를 수용해야하는 유효한 요구가있을 수 있습니다.
ibre5041

@JordonBedwell, 모든 SSH 연결 에 쉘 액세스 권한 있는 것은 아닙니다 . 하나의 특정 명령 (해당 키의 소유자 ID 및 기타 세부 정보 포함) 만 실행할 수있는 SSH 키를 사용하는 유일한 인증 계정이있는 여러 시스템이 있습니다.
Charles Duffy

... 2017 년 현재 ShellShock이 너무 과장되어 있음에 동의합니다. 현재 구현에서 내 보낸 함수를 생성하려면 환경 변수의 뿐만 아니라 그 이름 도 제어해야합니다 (쉘 시작 중에 내 보낸 함수를 평가하는 프로세스는 더 이상 주입 공격에 취약하지 않습니다).
Charles Duffy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.