현재 환경 (예 : 현재 Bash 세션)과 export
해당 자식 환경 (시작하는 스크립트, 서브 쉘 등) 명령을 사용하여 항상 환경 변수 만 설정할 수 있기 때문에 이것은 보안 위험이 아닙니다 . 상위 환경으로 작성 또는 수정 된 환경 변수를 에스컬레이션 할 수 없습니다. 여기에는 일반 사용자가 시스템 전체를 변경할 수 없다는 것도 포함됩니다.
따라서 실행할 때 영향을받는 유일한 환경 export LD_LIBRARY_PATH=...
은 현재 셸과 그 뒤에있는 셸의 하위 셸입니다. 처음에 감염된 라이브러리를 포함하도록 (즉, 우선 순위가 가장 높은) 검색 경로를 변경한다고 가정 해 봅시다. 그런 다음 모르게 감염된 라이브러리 중 하나를로드하는 실행 파일을 실행합니다. 지금 무슨 일이 일어나는거야?
관리자가 아닌 일반 권한으로 사용자 계정으로 실행되는 악성 코드 (감염된 라이브러리의)가 있습니다. 이것은 나쁘게 들릴지 모르지만 실제로 ... 그래서 무엇? 일반 사용자 권한으로 실행되므로 전체 시스템에 영향을 줄 수 없습니다. 그건 그렇고, 동일한 악성 코드로 실행 파일을 직접 실행하는 것은 라이브러리 조회 경로를 수정하고 일반 실행 파일이로드되기를 기다리는 것보다 훨씬 쉽습니다.
결론 : 일반 사용자는 자신의 라이브러리 조회 경로 만 수정할 수 있습니다. 즉, 일반 비 시스템 전체 권한이있는 일반 사용자 계정으로 해당 라이브러리 만로드 할 수 있습니다. 즉, 감염된 라이브러리를 강제로로드하거나 감염된 실행 파일을 직접 실행하는지 여부는 차이가 없습니다. 해당 환경 변수를 사용자가 재정의 할 수 없으면 아무 것도 얻지 못할 것입니다.
추신 : 이 또한이 실행됩니다 의 setuid 또는 setgid를 그들을 실행하는 하나의 사용자 / 그룹으로 실행되지 않습니다 수단 플래그가 설정,하지만 하나의 소유 를. 예를 들어 sudo
실행 파일은 root가 소유하고 setuid 플래그가 설정되어 있습니다. 즉, 실행시 항상 root로 실행됩니다. 보안상의 이유로 setuid / setgid 플래그 $LD_LIBRARY_PATH
중 하나가 설정된 실행 파일은 이 변수를 무시 하여 일반 사용자가 루트 권한으로 실행중인 실행 파일을 만들어 임의의 라이브러리를로드 할 수 없도록합니다. (이 사실을 지적한 @Rinzwind에 감사합니다!)