2014-09-27 5 views
1

셸 쇼크의 취약점에 대한 이해가 안 2 가지가 있습니다 Shellshock - 환경 변수의 주입이 허용되는 이유는 무엇입니까?

  1. 왜 환경 변수의 주입이 확인되지 않은 연결에 허용은? 그것은 무엇에 좋은가?
  2. 실제 어떤 서비스 변수를 삽입 할 수있는 기능을 제공합니다?

아이디어가 있으십니까?

+0

에 오신 것을 환영합니다. 곧 [About] 페이지를 읽으십시오. 이 질문 쌍 (또는 두 부분으로 된 질문)은 실제로 조금 광범위합니다. 또한 두 번째 질문에 대한 답변은 웹에서 쉽게 찾을 수 있습니다. [Bash의 쉘 충격 취약점에 대한 문서화가되었거나 의도적입니까?]에 대한 질문과 답변을 읽어보십시오. (http://stackoverflow.com/questions/26022248/) –

+0

http :// /unix.stackexchange.com/a/157495/74329 – Cyrus

+0

하나의 관찰 (반대 질문) : 연결이 확인되었는지 여부를 어떻게 알 수 있습니까? –

답변

-1

1)이 취약점은 구현 버그입니다. 신뢰할 수없는 출처의 환경 변수에 명령을 주입하는 것은 의도적으로 허용되지 않았으므로 이것이 버그입니다.

2) 취약점이 악용 될 수있는 방법의 좋은 예를 들어 http://blog.erratasec.com/2014/09/bash-shellshock-scan-of-internet.html#.VCNyvfmSx8E를 참조하십시오.

+0

문제는 환경 변수 그 자체가 아닙니다. 환경 변수의 값이 가정을 검증하지 않고 함수 선언만을 포함한다고 가정하면'eval'ed됩니다. – chepner

+0

좋은 지적. 내 대답을 편집했습니다. – mti2935

1

환경 변수는 자식 프로세스와 통신하는 일반적인 방법입니다. "왜 자식 프로세스에 인수를 전달할 수 있습니까?"라는 질문을 할 수도 있습니다. 물론 일부 환경 변수 (예 : PATH)가 일부 시스템 호출의 의미에 영향을주기 때문에 환경 변수를 사용하면 좀 더주의해야합니다. 따라서 일반적인 규칙은 신뢰할 수없는 입력에서 설정할 수있는 환경 변수를 알려진 이름 집합으로 제한하는 것입니다.

예를 들어, CGI 프로토콜 - 환경 변수를 사용하여 HTTP 요청에 대한 정보를 전달합니다. - 느슨하게 설명 할 수있는 환경 변수 이름 집합으로 제한합니다. the CGI standard과 임의의 환경 변수 문자 HTTP_으로 시작하십시오. CGI는 사용자 입력 가능한 환경 변수의 최대 인벤토리를 갖지만

이 기술은 매우 일반적이다. 하나의 잘 정립 된 예는 원격 터미널의 터미널 유형을 정의하기 위해 TERM을 사용하는 것이지만 더 많은 것들이 있습니다.

환경 변수, 명령 줄 매개 변수와 같은 치료로 치료해야하고, 때로는 장벽이 필요하다. /bin/env 유틸리티는 실행 파일에 지정된 환경을 정리하는 메커니즘을 제공합니다 (예 : 실행 파일이 상승 된 권한으로 실행되는 경우 환경이 신뢰할 수없고 필수적이지 않은 경우 유용합니다. 특별한 경우 제외

(같은 PATH), 어떤 응용 프로그램은 환경 변수가 깨끗함에 의존 없습니다. 처음으로 유효성을 검사하지 않고 환경 변수의 값을 기초로 무언가를 수행하는 것은 유효하지 않은 다른 사용자 제공 데이터 사용과 마찬가지로 많은 버그입니다. (q.v. SQL 주입 공격). 그게 우리가 여기있는 것입니다 : 버그, 평범하고 단순합니다. 이런 일이 일어난다. 우리는 완벽하지 않습니다. (이 버그는 분명히 아무도 모르게 20 년 이상을 위해 존재하고있다는 사실은 적어도 흥미로운입니다.) 스택 오버플로