“LD_LIBRARY_PATH”는 보안 위험입니까?


8

우리 ld.so는 environment variable로 지정된 디렉토리에서 라이브러리를 검색한다는 것을 알고 $LD_LIBRARY_PATH있지만 일반 사용자는 다음을 실행할 수 있습니다.

export LD_LIBRARY_PATH=dir1:dir2...

감염된 라이브러리를 원래 라이브러리보다 우선 순위가 높은 경로에 저장 ld.so하여에서 신뢰할 수있는 라이브러리 대신 해당 라이브러리 를 찾을 수 있습니다 ld.so.cache.

이것이 위험합니까?
일반 사용자를 위해이 환경 변수에 쓰지 못하게하려면 어떻게해야합니까?


편집을위한 @Byte Commander에게 감사합니다. 내 영어 실력이 좋지 않습니다 :)
Sinoosh

문제 없습니다, 그것은 평균보다 낫습니다 :)
Byte Commander

답변:


17

현재 환경 (예 : 현재 Bash 세션)과 export해당 자식 환경 (시작하는 스크립트, 서브 쉘 등) 명령을 사용하여 항상 환경 변수 만 설정할 수 있기 때문에 이것은 보안 위험이 아닙니다 . 상위 환경으로 작성 또는 수정 된 환경 변수를 에스컬레이션 할 수 없습니다. 여기에는 일반 사용자가 시스템 전체를 변경할 수 없다는 것도 포함됩니다.

따라서 실행할 때 영향을받는 유일한 환경 export LD_LIBRARY_PATH=...은 현재 셸과 그 뒤에있는 셸의 하위 셸입니다. 처음에 감염된 라이브러리를 포함하도록 (즉, 우선 순위가 가장 높은) 검색 경로를 변경한다고 가정 해 봅시다. 그런 다음 모르게 감염된 라이브러리 중 하나를로드하는 실행 파일을 실행합니다. 지금 무슨 일이 일어나는거야?

관리자가 아닌 일반 권한으로 사용자 계정으로 실행되는 악성 코드 (감염된 라이브러리의)가 있습니다. 이것은 나쁘게 들릴지 모르지만 실제로 ... 그래서 무엇? 일반 사용자 권한으로 실행되므로 전체 시스템에 영향을 줄 수 없습니다. 그건 그렇고, 동일한 악성 코드로 실행 파일을 직접 실행하는 것은 라이브러리 조회 경로를 수정하고 일반 실행 파일이로드되기를 기다리는 것보다 훨씬 쉽습니다.

결론 : 일반 사용자는 자신의 라이브러리 조회 경로 만 수정할 수 있습니다. 즉, 일반 비 시스템 전체 권한이있는 일반 사용자 계정으로 해당 라이브러리 만로드 할 수 있습니다. 즉, 감염된 라이브러리를 강제로로드하거나 감염된 실행 파일을 직접 실행하는지 여부는 차이가 없습니다. 해당 환경 변수를 사용자가 재정의 할 수 없으면 아무 것도 얻지 못할 것입니다.

추신 : 이 또한이 실행됩니다 의 setuid 또는 setgid를 그들을 실행하는 하나의 사용자 / 그룹으로 실행되지 않습니다 수단 플래그가 설정,하지만 하나의 소유 를. 예를 들어 sudo실행 파일은 root가 소유하고 setuid 플래그가 설정되어 있습니다. 즉, 실행시 항상 root로 실행됩니다. 보안상의 이유로 setuid / setgid 플래그 $LD_LIBRARY_PATH중 하나가 설정된 실행 파일은 이 변수를 무시 하여 일반 사용자가 루트 권한으로 실행중인 실행 파일을 만들어 임의의 라이브러리를로드 할 수 없도록합니다. (이 사실을 지적한 @Rinzwind에 감사합니다!)


고마워요! "LD_LIBRARY_PATH는 권한이없는 프로그램이 실수로 시스템 라이브러리에 액세스하거나 시스템 라이브러리 경로를 권한이없는 사용자에게 노출시킬 수 있기 때문에 보안 위험으로 간주됩니다."라는 책을 읽었습니다. 무슨 뜻입니까?
Sinoosh

1
@Sinoosh 신뢰할 수없는 응용 프로그램이 내 시스템 라이브러리의 위치를 ​​알고 있으면 보안 문제가되는 이유를 실제로 생각할 수 없습니다. 모든 것이 올바르게 구성되어 있고 권한을 엉망으로 만들지 않은 경우 루트가 소유하고 다른 사람이 쓸 수 없어야합니다. 즉 신뢰할 수없는 응용 프로그램을 루트로 실행하지 않는 한 어떤 방식 으로든 감염되거나 수정 될 위험이 없습니다. , 그러나 당신은 이것을하지 않을 것입니다. 맞습니까?)
바이트 사령관


@ Byte Commander, 저자와 동의하지 않겠다고 동의합니다 :)
Sinoosh

이 답변은 완전히 정확하지 않습니다. LD_LIBRARY_PATH은 물론 악성 라이브러리를로드하고 바이너리의 동작 방식을 변경할 때 보안 문제입니다.
heemayl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.